Improved the management of soap request/response.

The director has the opportunity to change the configuration of AC in join
connection. The virtual interfaces which encapsulate the wifi stations is
managed dynamically by the Director.
The AC must request authorization from Director for associate a station.
This commit is contained in:
vemax78
2014-10-19 21:37:22 +02:00
parent 63f5fcea19
commit 8937ded1d3
24 changed files with 1049 additions and 549 deletions

View File

@ -26,6 +26,8 @@ static void sc_iface_netdev_uninit(struct net_device* dev) {
int hash = CAPWAP_IFACE_HASH(dev->ifindex);
struct sc_netdev_priv* priv = (struct sc_netdev_priv*)netdev_priv(dev);
TRACEKMOD("### sc_iface_netdev_uninit\n");
/* Remove interface from hash */
spin_lock_irqsave(&sc_iface_lock, flags);
@ -66,24 +68,32 @@ static void sc_iface_netdev_uninit(struct net_device* dev) {
/* */
static int sc_iface_netdev_open(struct net_device* dev) {
TRACEKMOD("### sc_iface_netdev_open\n");
netif_start_queue(dev);
return 0;
}
/* */
static int sc_iface_netdev_stop(struct net_device* dev) {
TRACEKMOD("### sc_iface_netdev_stop\n");
netif_stop_queue(dev);
return 0;
}
/* */
static int sc_iface_netdev_tx(struct sk_buff* skb, struct net_device* dev) {
TRACEKMOD("### sc_iface_netdev_tx\n");
/* TODO */
return 0;
}
/* */
static int sc_iface_netdev_change_mtu(struct net_device* dev, int new_mtu) {
TRACEKMOD("### sc_iface_netdev_change_mtu\n");
/* TODO */
return 0;
}
@ -92,6 +102,8 @@ static int sc_iface_netdev_change_mtu(struct net_device* dev, int new_mtu) {
static void sc_iface_netdev_setup(struct net_device* dev) {
struct sc_netdev_priv* priv = (struct sc_netdev_priv*)netdev_priv(dev);
TRACEKMOD("### sc_iface_netdev_setup\n");
/* */
memset(priv, 0, sizeof(struct sc_netdev_priv));
priv->dev = dev;
@ -114,6 +126,8 @@ int sc_iface_create(const char* ifname, uint16_t mtu) {
struct net_device* dev;
struct sc_netdev_priv* priv;
TRACEKMOD("### sc_iface_create\n");
/* Create interface */
dev = alloc_netdev(sizeof(struct sc_netdev_priv), ifname, sc_iface_netdev_setup);
if (!dev) {
@ -164,6 +178,8 @@ int sc_iface_delete(uint32_t ifindex) {
unsigned long flags;
struct sc_netdev_priv* priv;
TRACEKMOD("### sc_iface_delete\n");
/* */
spin_lock_irqsave(&sc_iface_lock, flags);
@ -195,6 +211,8 @@ void sc_iface_closeall(void) {
int i;
unsigned long flags;
TRACEKMOD("### sc_iface_closeall\n");
while (sc_iface_count) {
struct net_device* dev = NULL;

View File

@ -291,7 +291,11 @@ static int sc_netlink_delete_iface(struct sk_buff* skb, struct genl_info* info)
}
/* */
return 0;
if (!info->attrs[NLSMARTCAPWAP_ATTR_IFPHY_INDEX]) {
return -EINVAL;
}
return sc_iface_delete(nla_get_u32(info->attrs[NLSMARTCAPWAP_ATTR_IFPHY_INDEX]));
}
/* */