samples: net: echo_server: Rework the VLAN support
Rework the code to support VLAN properly. Signed-off-by: Jukka Rissanen <jukka.rissanen@nordicsemi.no>
This commit is contained in:
parent
c4a4506b4a
commit
55cbe530df
|
@ -1,9 +1,14 @@
|
|||
CONFIG_NET_VLAN=y
|
||||
|
||||
# We have one non-vlan interface and two VLAN interfaces
|
||||
CONFIG_NET_VLAN_COUNT=3
|
||||
# Allow useful interface assigned to VLAN interface
|
||||
CONFIG_NET_INTERFACE_NAME_LEN=15
|
||||
|
||||
# There will be three network interfaces.
|
||||
# We have one non-vlan interface and two VLAN interfaces
|
||||
CONFIG_NET_VLAN_COUNT=2
|
||||
|
||||
# There will be three network interfaces so allocate enough IPv4 and IPv6 configs.
|
||||
CONFIG_NET_IF_MAX_IPV4_COUNT=3
|
||||
CONFIG_NET_IF_MAX_IPV6_COUNT=3
|
||||
|
||||
# First ethernet interface will use these settings
|
||||
CONFIG_NET_CONFIG_MY_IPV6_ADDR="2001:db8::1"
|
||||
|
|
|
@ -15,14 +15,19 @@ LOG_MODULE_DECLARE(net_echo_server_sample, LOG_LEVEL_DBG);
|
|||
struct ud {
|
||||
struct net_if *first;
|
||||
struct net_if *second;
|
||||
struct net_if *third;
|
||||
struct net_if *eth;
|
||||
};
|
||||
|
||||
static void iface_cb(struct net_if *iface, void *user_data)
|
||||
{
|
||||
struct ud *ud = user_data;
|
||||
|
||||
if (net_if_l2(iface) != &NET_L2_GET_NAME(ETHERNET)) {
|
||||
if (net_if_l2(iface) == &NET_L2_GET_NAME(ETHERNET) && ud->eth == NULL) {
|
||||
ud->eth = iface;
|
||||
return;
|
||||
}
|
||||
|
||||
if (net_if_l2(iface) != &NET_L2_GET_NAME(VIRTUAL)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -35,16 +40,11 @@ static void iface_cb(struct net_if *iface, void *user_data)
|
|||
ud->second = iface;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!ud->third) {
|
||||
ud->third = iface;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static int setup_iface(struct net_if *iface, const char *ipv6_addr,
|
||||
const char *ipv4_addr, const char *netmask,
|
||||
uint16_t vlan_tag)
|
||||
static int setup_iface(struct net_if *iface, struct net_if *vlan,
|
||||
const char *ipv6_addr, const char *ipv4_addr,
|
||||
const char *netmask, uint16_t vlan_tag)
|
||||
{
|
||||
struct net_if_addr *ifaddr;
|
||||
struct in_addr addr4;
|
||||
|
@ -62,11 +62,11 @@ static int setup_iface(struct net_if *iface, const char *ipv6_addr,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
ifaddr = net_if_ipv6_addr_add(iface, &addr6,
|
||||
ifaddr = net_if_ipv6_addr_add(vlan, &addr6,
|
||||
NET_ADDR_MANUAL, 0);
|
||||
if (!ifaddr) {
|
||||
LOG_ERR("Cannot add %s to interface %p",
|
||||
ipv6_addr, iface);
|
||||
ipv6_addr, vlan);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
@ -77,11 +77,11 @@ static int setup_iface(struct net_if *iface, const char *ipv6_addr,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
ifaddr = net_if_ipv4_addr_add(iface, &addr4,
|
||||
ifaddr = net_if_ipv4_addr_add(vlan, &addr4,
|
||||
NET_ADDR_MANUAL, 0);
|
||||
if (!ifaddr) {
|
||||
LOG_ERR("Cannot add %s to interface %p",
|
||||
ipv4_addr, iface);
|
||||
ipv4_addr, vlan);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -93,11 +93,11 @@ static int setup_iface(struct net_if *iface, const char *ipv6_addr,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
net_if_ipv4_set_netmask_by_addr(iface, &addr4, &nm);
|
||||
net_if_ipv4_set_netmask_by_addr(vlan, &addr4, &nm);
|
||||
}
|
||||
}
|
||||
|
||||
LOG_DBG("Interface %p VLAN tag %d setup done.", iface, vlan_tag);
|
||||
LOG_DBG("Interface %p VLAN tag %d setup done.", vlan, vlan_tag);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -115,7 +115,7 @@ int init_vlan(void)
|
|||
* create IP address for this test. But first the VLAN needs to be
|
||||
* added to the interface so that IPv6 DAD can work properly.
|
||||
*/
|
||||
ret = setup_iface(ud.second,
|
||||
ret = setup_iface(ud.eth, ud.first,
|
||||
CONFIG_NET_SAMPLE_IFACE2_MY_IPV6_ADDR,
|
||||
CONFIG_NET_SAMPLE_IFACE2_MY_IPV4_ADDR,
|
||||
CONFIG_NET_SAMPLE_IFACE2_MY_IPV4_NETMASK,
|
||||
|
@ -124,7 +124,7 @@ int init_vlan(void)
|
|||
return ret;
|
||||
}
|
||||
|
||||
ret = setup_iface(ud.third,
|
||||
ret = setup_iface(ud.eth, ud.second,
|
||||
CONFIG_NET_SAMPLE_IFACE3_MY_IPV6_ADDR,
|
||||
CONFIG_NET_SAMPLE_IFACE3_MY_IPV4_ADDR,
|
||||
CONFIG_NET_SAMPLE_IFACE3_MY_IPV4_NETMASK,
|
||||
|
|
Loading…
Reference in a new issue