/* * INIT */ static void init_ifnet(void) { char str[256]; ofp_config_interface_up_v4(port, vlan, vrf, dev_ip, 24); /* port 0 */ dev = ofp_get_ifnet(port, vlan); memcpy(dev->mac, dev_mac, OFP_ETHER_ADDR_LEN); dev->if_mtu = def_mtu; #ifdef SP dev->linux_index = port + 3; /* an if index of Linux != port val */ ofp_update_ifindex_lookup_tab(dev); #endif /* SP */ dev->pkt_pool = odp_pool_lookup(pool_name); sprintf(str, "out default queue:%d", port); dev->outq_def = odp_queue_create(str, NULL); if (dev->outq_def == ODP_QUEUE_INVALID) { fail_with_odp("Out default queue create failed.\n"); return; } dev->out_queue_num = 1; dev->out_queue_type = OFP_OUT_QUEUE_TYPE_QUEUE; /* port 0 vlan 1 */ ofp_config_interface_up_v4(port, vlan + 1, vrf, dev_ip + 1, 24); dev_vlan = ofp_get_ifnet(port, vlan + 1); memcpy(dev_vlan->mac, dev_vlan_mac, OFP_ETHER_ADDR_LEN); dev_vlan->if_mtu = def_mtu; #ifdef SP dev_vlan->linux_index = port + 4; /* an if index of Linux != port val */ ofp_update_ifindex_lookup_tab(dev_vlan); #endif /* SP */ dev_vlan->pkt_pool = odp_pool_lookup(pool_name); sprintf(str, "out default queue:%d", port); dev_vlan->outq_def = odp_queue_create(str, NULL); if (dev_vlan->outq_def == ODP_QUEUE_INVALID) { fail_with_odp("Out default queue create failed.\n"); return; } /* Tunnels */ ofp_config_interface_up_tun(GRE_PORTS, 100, 0, dev_ip, tun_rem_ip, tun_p2p, tun_addr, tun_mask); /* No nexthop for tunnel remote address */ ofp_config_interface_up_tun(GRE_PORTS, 200, 0, dev_ip, 0x08070605, tun_p2p + 1, tun_addr + 1, tun_mask); }
static void test_two_ports_vlan(void) { int port = 0; uint16_t vlan = 0, vlan1 = 100; uint16_t vrf = 1, vrf1 = 2; uint32_t ifaddr = 0x650AA8C0; /* C0.A8.0A.65 = 192.168.10.101 */ uint32_t ifaddr1 = 0x650AA8C1; int masklen = 24, masklen1 = 20; uint32_t bcast = ifaddr | odp_cpu_to_be_32(0xFF); uint32_t bcast1 = ifaddr1 | odp_cpu_to_be_32(0xFFF); struct ofp_ifnet *dev; struct ofp_nh_entry *nh; const char *res; res = ofp_config_interface_up_v4(port, vlan, vrf, ifaddr, masklen); CU_ASSERT_PTR_NULL_FATAL(res); res = ofp_config_interface_up_v4(port, vlan1, vrf1, ifaddr1, masklen1); CU_ASSERT_PTR_NULL_FATAL(res); dev = ofp_get_ifnet(port, vlan); CU_ASSERT_PTR_NOT_NULL_FATAL(dev); assert_dev(dev, port, vlan, vrf, ifaddr, ifmtu, masklen, bcast, link_local); nh = ofp_get_next_hop(vrf, ifaddr, NULL); assert_next_hop(nh, 0, port, vlan); dev = ofp_get_ifnet(port, vlan1); assert_dev(dev, port, vlan1, vrf1, ifaddr1, ifmtu, masklen1, bcast1, link_local); nh = ofp_get_next_hop(vrf1, ifaddr1, NULL); assert_next_hop(nh, 0, port, vlan1); res = ofp_config_interface_down(port, vlan); CU_ASSERT_PTR_NULL_FATAL(res); res = ofp_config_interface_down(port, vlan1); CU_ASSERT_PTR_NULL_FATAL(res); dev = ofp_get_ifnet(port, vlan); assert_dev(dev, port, vlan, vrf, 0, ifmtu, masklen, bcast, link_local); nh = ofp_get_next_hop(vrf, ifaddr, NULL); CU_ASSERT_PTR_NULL(nh); dev = ofp_get_ifnet(port, vlan1); CU_ASSERT_PTR_NULL_FATAL(dev); nh = ofp_get_next_hop(vrf1, ifaddr1, NULL); CU_ASSERT_PTR_NULL(nh); }
static void init_ifnet(void) { char str[256]; ofp_config_interface_up_v4(port, vlan, vrf, dev_ip, 24); dev = ofp_get_ifnet(port, vlan); memcpy(dev->mac, dev_mac, OFP_ETHER_ADDR_LEN); dev->if_mtu = def_mtu; #ifdef SP dev->linux_index = port + 3; /* an if index of Linux != port val */ ofp_update_ifindex_lookup_tab(dev); #endif /* SP */ dev->pkt_pool = odp_pool_lookup("packet_pool"); sprintf(str, "out default queue:%d", port); dev->outq_def = odp_queue_create(str, NULL); if (dev->outq_def == ODP_QUEUE_INVALID) { fail_with_odp("Out default queue create failed.\n"); return; } dev->out_queue_num = 1; dev->out_queue_type = OFP_OUT_QUEUE_TYPE_QUEUE; }
static void test_sinlge_port_basic(void) { int port = 0; uint16_t vlan = 0; uint16_t vrf = 1; uint32_t ifaddr = 0x650AA8C0; /* C0.A8.0A.65 = 192.168.10.101 */ int masklen = 24; uint32_t bcast = ifaddr | odp_cpu_to_be_32(0xFF); struct ofp_ifnet *dev; struct ofp_nh_entry *nh; const char *res; res = ofp_config_interface_up_v4(port, vlan, vrf, ifaddr, masklen); CU_ASSERT_PTR_NULL_FATAL(res); dev = ofp_get_ifnet(port, vlan); assert_dev(dev, port, vlan, vrf, ifaddr, ifmtu, masklen, bcast, link_local); nh = ofp_get_next_hop(vrf, ifaddr, NULL); assert_next_hop(nh, 0, port, vlan); res = ofp_config_interface_down(port, vlan); CU_ASSERT_PTR_NULL_FATAL(res); dev = ofp_get_ifnet(port, vlan); assert_dev(dev, port, vlan, vrf, 0, ifmtu, masklen, bcast, link_local); nh = ofp_get_next_hop(vrf, ifaddr, NULL); CU_ASSERT_PTR_NULL(nh); }
/* "ifconfig [-A inet 4] DEV IP4NET";*/ void f_ifconfig(struct cli_conn *conn, const char *s) { char dev[16]; int port, a, b, c, d, m, vlan, vrf = 0; uint32_t addr; const char *err; if (sscanf(s, "%s %d.%d.%d.%d/%d %d", dev, &a, &b, &c, &d, &m, &vrf) < 6) return; addr = odp_cpu_to_be_32((a << 24) | (b << 16) | (c << 8) | d); port = ofp_name_to_port_vlan(dev, &vlan); if (port == GRE_PORTS || port == VXLAN_PORTS) { ofp_sendf(conn->fd, "Invalid device name.\r\n"); return; } if (PHYS_PORT(port)) err = ofp_config_interface_up_v4(port, vlan, vrf, addr, m); else err = ofp_config_interface_up_local(vlan, vrf, addr, m); if (err != NULL) ofp_sendf(conn->fd, err); sendcrlf(conn); }
static void test_gre_port(void) { int port = 0; uint16_t vlan = 10; uint16_t vrf = 1; uint32_t ifaddr = 0x650AA8C0; /* C0.A8.0A.65 = 192.168.10.101 */ int masklen = 24, gre_ml = 32; uint16_t greid = 100; uint32_t greaddr = 0x010A0A0A; uint32_t grep2p = 0x020A0A0A; struct ofp_ifnet *dev; struct ofp_nh_entry *nh; const char *res; res = ofp_config_interface_up_v4(port, vlan, vrf, ifaddr, masklen); CU_ASSERT_PTR_NULL_FATAL(res); /* Non-existent endpoint in vrf */ res = ofp_config_interface_up_tun(GRE_PORTS, greid, vrf + 1, ifaddr, ifaddr + 1, greaddr, grep2p, gre_ml); CU_ASSERT_PTR_NOT_NULL_FATAL(res); dev = ofp_get_ifnet(GRE_PORTS, greid); CU_ASSERT_PTR_NULL_FATAL(dev); /* Successful test */ res = ofp_config_interface_up_tun(GRE_PORTS, greid, vrf, ifaddr, ifaddr + 1, grep2p, greaddr, gre_ml); CU_ASSERT_PTR_NULL_FATAL(res); dev = ofp_get_ifnet(GRE_PORTS, greid); CU_ASSERT_PTR_NOT_NULL_FATAL(dev); CU_ASSERT_EQUAL(dev->ip_local, ifaddr); CU_ASSERT_EQUAL(dev->ip_remote, ifaddr + 1); CU_ASSERT_EQUAL(dev->ip_addr, greaddr); CU_ASSERT_EQUAL(dev->ip_p2p, grep2p); CU_ASSERT_EQUAL(dev->masklen, gre_ml); CU_ASSERT_EQUAL(dev->if_mtu, ifmtu - 24); nh = ofp_get_next_hop(vrf, grep2p, NULL); assert_next_hop(nh, 0, GRE_PORTS, greid); res = ofp_config_interface_down(port, vlan); CU_ASSERT_PTR_NULL_FATAL(res); res = ofp_config_interface_down(GRE_PORTS, greid); CU_ASSERT_PTR_NULL_FATAL(res); dev = ofp_get_ifnet(GRE_PORTS, greid); CU_ASSERT_PTR_NULL_FATAL(dev); }
/* * INIT */ static void test_init_ifnet(void) { char str[256]; ofp_config_interface_up_v4(port, vlan, vrf, local_ip, 24); ifnet = ofp_get_ifnet(port, vlan); ifnet->pkt_pool = odp_pool_lookup("packet_pool"); #ifdef SP ifnet->linux_index = port + 3; /* an if index of Linux != port val */ ofp_update_ifindex_lookup_tab(ifnet); sprintf(str, "slow path stack port:%d", port); ifnet->spq_def = odp_queue_create(str, ODP_QUEUE_TYPE_POLL, NULL); if (ifnet->spq_def == ODP_QUEUE_INVALID) { fail_with_odp("Slow path queue create failed.\n"); return; } #endif sprintf(str, "out default queue:%d", port); ifnet->outq_def = odp_queue_create(str, ODP_QUEUE_TYPE_POLL, NULL); if (ifnet->outq_def == ODP_QUEUE_INVALID) { fail_with_odp("Out default queue create failed.\n"); return; } sprintf(str, "interface queue:%d", port); interface_queue[port] = odp_queue_create(str, ODP_QUEUE_TYPE_POLL, NULL); if (interface_queue[port] == ODP_QUEUE_INVALID) { OFP_ERR("Poll queue create failed.\n"); return; } ofp_queue_context_set(interface_queue[port], ifnet); ofp_config_interface_up_tun(GRE_PORTS, 100 + port, vrf, local_ip, tun_rem_ip, tun_p2p, tun_addr, tun_mask); }
static void ofp_ifconfig(void) { struct ifaddrs *ifap, *ifa; struct sockaddr_in *sa; int port = 0; getifaddrs(&ifap); for (ifa = ifap; ifa; ifa = ifa->ifa_next) if (ifa->ifa_addr->sa_family == AF_INET) { sa = (struct sockaddr_in *) ifa->ifa_addr; OFP_DBG("Interface: %s\tAddress: %x\n", ifa->ifa_name, sa->sin_addr.s_addr); ofp_ifnet_create(ifa->ifa_name, NULL, NULL, NULL); ofp_config_interface_up_v4(port++, 0, 0, sa->sin_addr.s_addr, 24); } freeifaddrs(ifap); return; }