caif: make zero a legal caif connetion id.
authorsjur.brandeland@stericsson.com <sjur.brandeland@stericsson.com>
Sun, 11 Mar 2012 10:28:32 +0000 (10:28 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sun, 11 Mar 2012 22:38:16 +0000 (15:38 -0700)
Connection ID configured through RTNL must allow zero as
connection id. If connection-id is not given when creating the
interface, configure a loopback interface using ifindex as
connection-id.

Signed-off-by: Sjur Brændeland <sjur.brandeland@stericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/caif/chnl_net.c

index e866234d0e5aeddae2ee6a3ce7507ca7459540ed..20618dd3088b79e0f1528436c7b1c9359f9c9cd6 100644 (file)
@@ -28,6 +28,7 @@
 /* 5 sec. connect timeout */
 #define CONNECT_TIMEOUT (5 * HZ)
 #define CAIF_NET_DEFAULT_QUEUE_LEN 500
+#define UNDEF_CONNID 0xffffffff
 
 /*This list is protected by the rtnl lock. */
 static LIST_HEAD(chnl_net_list);
@@ -408,7 +409,7 @@ static void ipcaif_net_setup(struct net_device *dev)
        priv->conn_req.link_selector = CAIF_LINK_HIGH_BANDW;
        priv->conn_req.priority = CAIF_PRIO_LOW;
        /* Insert illegal value */
-       priv->conn_req.sockaddr.u.dgm.connection_id = 0;
+       priv->conn_req.sockaddr.u.dgm.connection_id = UNDEF_CONNID;
        priv->flowenabled = false;
 
        init_waitqueue_head(&priv->netmgmt_wq);
@@ -471,9 +472,11 @@ static int ipcaif_newlink(struct net *src_net, struct net_device *dev,
        else
                list_add(&caifdev->list_field, &chnl_net_list);
 
-       /* Take ifindex as connection-id if null */
-       if (caifdev->conn_req.sockaddr.u.dgm.connection_id == 0)
+       /* Use ifindex as connection id, and use loopback channel default. */
+       if (caifdev->conn_req.sockaddr.u.dgm.connection_id == UNDEF_CONNID) {
                caifdev->conn_req.sockaddr.u.dgm.connection_id = dev->ifindex;
+               caifdev->conn_req.protocol = CAIFPROTO_DATAGRAM_LOOP;
+       }
        return ret;
 }