disable IPv6 on WTP AP interface
This commit is contained in:
parent
58741d302f
commit
973bf5eab7
@ -814,6 +814,19 @@ static int nl80211_wlan_startap(struct wifi_wlan* wlan) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* */
|
||||||
|
if (wlan->tunnelmode != CAPWAP_ADD_WLAN_TUNNELMODE_LOCAL) {
|
||||||
|
/* Join interface in kernel module */
|
||||||
|
uint32_t flags = ((wlan->tunnelmode == CAPWAP_ADD_WLAN_TUNNELMODE_80211) ? WTP_KMOD_FLAGS_TUNNEL_NATIVE : WTP_KMOD_FLAGS_TUNNEL_8023);
|
||||||
|
|
||||||
|
if (!wtp_kmod_join_mac80211_device(wlan, flags)) {
|
||||||
|
capwap_logging_info("Joined the interface %d in kernel mode ", wlan->virtindex);
|
||||||
|
} else {
|
||||||
|
capwap_logging_error("Unable to join the interface %d in kernel mode ", wlan->virtindex);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Enable interface */
|
/* Enable interface */
|
||||||
wlan->flags |= WIFI_WLAN_RUNNING;
|
wlan->flags |= WIFI_WLAN_RUNNING;
|
||||||
if (wifi_iface_up(wlanhandle->devicehandle->globalhandle->sock_util, wlan->virtname)) {
|
if (wifi_iface_up(wlanhandle->devicehandle->globalhandle->sock_util, wlan->virtname)) {
|
||||||
@ -832,19 +845,6 @@ static int nl80211_wlan_startap(struct wifi_wlan* wlan) {
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* */
|
|
||||||
if (wlan->tunnelmode != CAPWAP_ADD_WLAN_TUNNELMODE_LOCAL) {
|
|
||||||
/* Join interface in kernel module */
|
|
||||||
uint32_t flags = ((wlan->tunnelmode == CAPWAP_ADD_WLAN_TUNNELMODE_80211) ? WTP_KMOD_FLAGS_TUNNEL_NATIVE : WTP_KMOD_FLAGS_TUNNEL_8023);
|
|
||||||
|
|
||||||
if (!wtp_kmod_join_mac80211_device(wlan, flags)) {
|
|
||||||
capwap_logging_info("Joined the interface %d in kernel mode ", wlan->virtindex);
|
|
||||||
} else {
|
|
||||||
capwap_logging_error("Unable to join the interface %d in kernel mode ", wlan->virtindex);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Enable operation status */
|
/* Enable operation status */
|
||||||
wlan->flags |= WIFI_WLAN_OPERSTATE_RUNNING;
|
wlan->flags |= WIFI_WLAN_OPERSTATE_RUNNING;
|
||||||
netlink_set_link_status(wlanhandle->devicehandle->globalhandle->netlinkhandle, wlan->virtindex, -1, IF_OPER_UP);
|
netlink_set_link_status(wlanhandle->devicehandle->globalhandle->netlinkhandle, wlan->virtindex, -1, IF_OPER_UP);
|
||||||
|
@ -121,28 +121,45 @@ error:
|
|||||||
static struct sc_netlink_device* sc_netlink_new_device(struct net *net, uint32_t ifindex,
|
static struct sc_netlink_device* sc_netlink_new_device(struct net *net, uint32_t ifindex,
|
||||||
uint8_t radioid, u8 wlanid, uint8_t binding)
|
uint8_t radioid, u8 wlanid, uint8_t binding)
|
||||||
{
|
{
|
||||||
|
int err = 0;
|
||||||
struct net_device* dev;
|
struct net_device* dev;
|
||||||
struct sc_netlink_device* nldev;
|
struct sc_netlink_device* nldev;
|
||||||
|
struct inet6_dev *idev;
|
||||||
|
|
||||||
TRACEKMOD("### sc_netlink_new_device\n");
|
TRACEKMOD("### sc_netlink_new_device\n");
|
||||||
|
|
||||||
/* Retrieve device from ifindex */
|
/* Retrieve device from ifindex */
|
||||||
dev = dev_get_by_index(net, ifindex);
|
dev = dev_get_by_index(net, ifindex);
|
||||||
if (!dev) {
|
if (!dev)
|
||||||
return NULL;
|
return ERR_PTR(-ENODEV);
|
||||||
}
|
|
||||||
|
|
||||||
/* Check if wireless device */
|
/* Check if wireless device */
|
||||||
if (!dev->ieee80211_ptr || !dev->ieee80211_ptr->wiphy) {
|
if (!dev->ieee80211_ptr ||
|
||||||
dev_put(dev);
|
!dev->ieee80211_ptr->wiphy) {
|
||||||
return NULL;
|
err = -ENODEV;
|
||||||
|
goto out_err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (unlikely(dev->flags & IFF_UP)) {
|
||||||
|
err = -EINVAL;
|
||||||
|
goto out_err;
|
||||||
|
}
|
||||||
|
|
||||||
|
idev = __in6_dev_get(dev);
|
||||||
|
if (!idev) {
|
||||||
|
err = -ENODEV;
|
||||||
|
goto out_err;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* disable IPv6 on this iface */
|
||||||
|
printk("SmartCAPWAP: disabling IPv6 on %s\n", dev->name);
|
||||||
|
idev->cnf.disable_ipv6 = 1;
|
||||||
|
|
||||||
/* Create device */
|
/* Create device */
|
||||||
nldev = (struct sc_netlink_device*)kzalloc(sizeof(struct sc_netlink_device), GFP_KERNEL);
|
nldev = (struct sc_netlink_device*)kzalloc(sizeof(struct sc_netlink_device), GFP_KERNEL);
|
||||||
if (!nldev) {
|
if (!nldev) {
|
||||||
dev_put(dev);
|
err = -ENOMEM;
|
||||||
return NULL;
|
goto out_err;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialize device */
|
/* Initialize device */
|
||||||
@ -156,6 +173,10 @@ static struct sc_netlink_device* sc_netlink_new_device(struct net *net, uint32_t
|
|||||||
nldev->net = net;
|
nldev->net = net;
|
||||||
|
|
||||||
return nldev;
|
return nldev;
|
||||||
|
|
||||||
|
out_err:
|
||||||
|
dev_put(dev);
|
||||||
|
return ERR_PTR(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* */
|
/* */
|
||||||
@ -199,9 +220,8 @@ sc_netlink_register_device(struct net *net, uint32_t ifindex, uint8_t radioid,
|
|||||||
|
|
||||||
/* Create device */
|
/* Create device */
|
||||||
nldev = sc_netlink_new_device(net, ifindex, radioid, wlanid, binding);
|
nldev = sc_netlink_new_device(net, ifindex, radioid, wlanid, binding);
|
||||||
if (nldev) {
|
if (!IS_ERR(nldev))
|
||||||
list_add_rcu(&nldev->list, &sn->sc_netlink_dev_list);
|
list_add_rcu(&nldev->list, &sn->sc_netlink_dev_list);
|
||||||
}
|
|
||||||
|
|
||||||
return nldev;
|
return nldev;
|
||||||
}
|
}
|
||||||
@ -533,9 +553,8 @@ static int sc_netlink_join_mac80211_device(struct sk_buff* skb, struct genl_info
|
|||||||
nla_get_u8(info->attrs[NLSMARTCAPWAP_ATTR_RADIOID]),
|
nla_get_u8(info->attrs[NLSMARTCAPWAP_ATTR_RADIOID]),
|
||||||
nla_get_u8(info->attrs[NLSMARTCAPWAP_ATTR_WLANID]),
|
nla_get_u8(info->attrs[NLSMARTCAPWAP_ATTR_WLANID]),
|
||||||
nla_get_u8(info->attrs[NLSMARTCAPWAP_ATTR_BINDING]));
|
nla_get_u8(info->attrs[NLSMARTCAPWAP_ATTR_BINDING]));
|
||||||
if (!nldev) {
|
if (IS_ERR(nldev))
|
||||||
return -EINVAL;
|
PTR_ERR(nldev);
|
||||||
}
|
|
||||||
|
|
||||||
/* */
|
/* */
|
||||||
if (info->attrs[NLSMARTCAPWAP_ATTR_FLAGS]) {
|
if (info->attrs[NLSMARTCAPWAP_ATTR_FLAGS]) {
|
||||||
@ -943,7 +962,7 @@ int __init sc_netlink_init(void) {
|
|||||||
if (ret)
|
if (ret)
|
||||||
goto unreg_genl_family;
|
goto unreg_genl_family;
|
||||||
|
|
||||||
pr_info("smartCAPWAP module loaded");
|
pr_info("smartCAPWAP module loaded\n");
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
unreg_genl_family:
|
unreg_genl_family:
|
||||||
|
Loading…
Reference in New Issue
Block a user