diff options
author | Andre Carvalho de Matos <andre.carvalho.matos@stericsson.com> | 2010-10-20 18:28:09 +0200 |
---|---|---|
committer | Jonas ABERG <jonas.aberg@stericsson.com> | 2011-05-05 07:58:03 +0200 |
commit | 1085d951c41a6d24978c38e9edf8ffc7252a7b42 (patch) | |
tree | 37d028401bd993afa62a7a12efe695615a2ef7ff /net | |
parent | 606308eebd1eafb2ac7aab37dd8468e0d7b84db4 (diff) |
CAIF: Fixed bindtodevice from set socket options
Change-Id: I794783fb03e5514824cdbfebce786aaf50f33a9e
Signed-off-by: Erwan Bracq <erwan.bracq@stericsson.com>
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/21530
Reviewed-by: QATEST
Reviewed-by: Jonas ABERG <jonas.aberg@stericsson.com>
Diffstat (limited to 'net')
-rw-r--r-- | net/caif/caif_config_util.c | 5 | ||||
-rw-r--r-- | net/caif/caif_socket.c | 19 | ||||
-rw-r--r-- | net/caif/cfcnfg.c | 14 |
3 files changed, 11 insertions, 27 deletions
diff --git a/net/caif/caif_config_util.c b/net/caif/caif_config_util.c index d436bf26826..8794bf4e39b 100644 --- a/net/caif/caif_config_util.c +++ b/net/caif/caif_config_util.c @@ -21,8 +21,9 @@ int caif_connect_req_to_link_param(struct cfcnfg *cnfg, /* In caif protocol low value is high priority */ l->priority = CAIF_PRIO_MAX - s->priority + 1; - if (s->link_name[0] != '\0') - l->phyid = cfcnfg_get_named(cnfg, s->link_name); + if (s->ifindex != 0){ + l->phyid = cfcnfg_get_id_from_ifi(cnfg, s->ifindex); + } else { switch (s->link_selector) { case CAIF_LINK_HIGH_BANDW: diff --git a/net/caif/caif_socket.c b/net/caif/caif_socket.c index f7b8563c65b..a514075475f 100644 --- a/net/caif/caif_socket.c +++ b/net/caif/caif_socket.c @@ -688,7 +688,6 @@ static int setsockopt(struct socket *sock, struct sock *sk = sock->sk; struct caifsock *cf_sk = container_of(sk, struct caifsock, sk); int linksel; - struct ifreq ifreq; if (cf_sk->sk.sk_socket->state != SS_UNCONNECTED) return -ENOPROTOOPT; @@ -706,21 +705,6 @@ static int setsockopt(struct socket *sock, release_sock(&cf_sk->sk); return 0; - case SO_BINDTODEVICE: - if (lvl != SOL_SOCKET) - goto bad_sol; - if (ol < sizeof(struct ifreq)) - return -EINVAL; - if (copy_from_user(&ifreq, ov, sizeof(ifreq))) - return -EFAULT; - lock_sock(&(cf_sk->sk)); - strncpy(cf_sk->conn_req.link_name, ifreq.ifr_name, - sizeof(cf_sk->conn_req.link_name)); - cf_sk->conn_req.link_name - [sizeof(cf_sk->conn_req.link_name)-1] = 0; - release_sock(&cf_sk->sk); - return 0; - case CAIFSO_REQ_PARAM: if (lvl != SOL_CAIF) goto bad_sol; @@ -850,6 +834,9 @@ static int caif_connect(struct socket *sock, struct sockaddr *uaddr, else cf_sk->conn_req.priority = cf_sk->sk.sk_priority; + /*ifindex = id of the interface.*/ + cf_sk->conn_req.ifindex = cf_sk->sk.sk_bound_dev_if; + dbfs_atomic_inc(&cnt.num_connect_req); cf_sk->layer.receive = caif_sktrecv_cb; err = caif_connect_client(&cf_sk->conn_req, diff --git a/net/caif/cfcnfg.c b/net/caif/cfcnfg.c index c02fa02671e..02c0b6c3b46 100644 --- a/net/caif/cfcnfg.c +++ b/net/caif/cfcnfg.c @@ -173,17 +173,13 @@ static struct cfcnfg_phyinfo *cfcnfg_get_phyinfo(struct cfcnfg *cnfg, return NULL; } -int cfcnfg_get_named(struct cfcnfg *cnfg, char *name) +int cfcnfg_get_id_from_ifi(struct cfcnfg *cnfg, int ifi) { int i; - - /* Try to match with specified name */ - for (i = 0; i < MAX_PHY_LAYERS; i++) { - if (cnfg->phy_layers[i].frm_layer != NULL - && strcmp(cnfg->phy_layers[i].phy_layer->name, - name) == 0) - return cnfg->phy_layers[i].frm_layer->id; - } + for (i = 0; i < MAX_PHY_LAYERS; i++) + if (cnfg->phy_layers[i].frm_layer != NULL && + cnfg->phy_layers[i].ifindex == ifi) + return i; return 0; } |