diff options
author | Andre Carvalho de Matos <andre.carvalho.matos@stericsson.com> | 2010-09-29 13:20:25 +0200 |
---|---|---|
committer | Jonas ABERG <jonas.aberg@stericsson.com> | 2011-05-05 07:57:40 +0200 |
commit | 4129e39222bb205c69949edf6a7af252913d5f3f (patch) | |
tree | f569277707f0b608d101e86dd57d631d3916c40a /net | |
parent | eeb29bf4116bd4420e261bc703d6300b0ed4d5d6 (diff) |
CAIF: Bugfix on Priority on socket and net devices
Found that priority for the caif interface in kernel is different
than the caif protocol. Added a fix to convert between the 2.
Changed way to set socket options for priority, now it is used the
kernel standart.
For net devices fixed a bug for defning default values of
conn_req.
Change-Id: I08da8c1ed89482eef5782e353bee656dc0088f66
Signed-off-by: Erwan Bracq <erwan.bracq@stericsson.com>
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/21528
Reviewed-by: QATEST
Reviewed-by: Jonas ABERG <jonas.aberg@stericsson.com>
Diffstat (limited to 'net')
-rw-r--r-- | net/caif/caif_config_util.c | 4 | ||||
-rw-r--r-- | net/caif/caif_socket.c | 27 | ||||
-rw-r--r-- | net/caif/chnl_net.c | 5 |
3 files changed, 16 insertions, 20 deletions
diff --git a/net/caif/caif_config_util.c b/net/caif/caif_config_util.c index 343d66d8f30..d436bf26826 100644 --- a/net/caif/caif_config_util.c +++ b/net/caif/caif_config_util.c @@ -17,7 +17,9 @@ int caif_connect_req_to_link_param(struct cfcnfg *cnfg, struct dev_info *dev_info; enum cfcnfg_phy_preference pref; memset(l, 0, sizeof(*l)); - l->priority = s->priority; + + /* 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); diff --git a/net/caif/caif_socket.c b/net/caif/caif_socket.c index 2b606d85f47..f7b8563c65b 100644 --- a/net/caif/caif_socket.c +++ b/net/caif/caif_socket.c @@ -687,7 +687,7 @@ static int setsockopt(struct socket *sock, { struct sock *sk = sock->sk; struct caifsock *cf_sk = container_of(sk, struct caifsock, sk); - int prio, linksel; + int linksel; struct ifreq ifreq; if (cf_sk->sk.sk_socket->state != SS_UNCONNECTED) @@ -706,18 +706,6 @@ static int setsockopt(struct socket *sock, release_sock(&cf_sk->sk); return 0; - case SO_PRIORITY: - if (lvl != SOL_SOCKET) - goto bad_sol; - if (ol < sizeof(int)) - return -EINVAL; - if (copy_from_user(&prio, ov, sizeof(int))) - return -EINVAL; - lock_sock(&(cf_sk->sk)); - cf_sk->conn_req.priority = prio; - release_sock(&cf_sk->sk); - return 0; - case SO_BINDTODEVICE: if (lvl != SOL_SOCKET) goto bad_sol; @@ -851,6 +839,17 @@ static int caif_connect(struct socket *sock, struct sockaddr *uaddr, sock->state = SS_CONNECTING; sk->sk_state = CAIF_CONNECTING; + /* + * Check priority value comming from socket + * if priority value is out of range it will be ajusted + */ + if (cf_sk->sk.sk_priority > CAIF_PRIO_MAX) + cf_sk->conn_req.priority = CAIF_PRIO_MAX; + else if (cf_sk->sk.sk_priority < CAIF_PRIO_MIN) + cf_sk->conn_req.priority = CAIF_PRIO_MIN; + else + cf_sk->conn_req.priority = cf_sk->sk.sk_priority; + dbfs_atomic_inc(&cnt.num_connect_req); cf_sk->layer.receive = caif_sktrecv_cb; err = caif_connect_client(&cf_sk->conn_req, @@ -1113,7 +1112,7 @@ static int caif_create(struct net *net, struct socket *sock, int protocol, set_rx_flow_on(cf_sk); /* Set default options on configuration */ - cf_sk->conn_req.priority = CAIF_PRIO_NORMAL; + cf_sk->sk.sk_priority= CAIF_PRIO_NORMAL; cf_sk->conn_req.link_selector = CAIF_LINK_LOW_LATENCY; cf_sk->conn_req.protocol = protocol; /* Increase the number of sockets created. */ diff --git a/net/caif/chnl_net.c b/net/caif/chnl_net.c index 6008d6dc18a..24b066761c6 100644 --- a/net/caif/chnl_net.c +++ b/net/caif/chnl_net.c @@ -387,11 +387,6 @@ static void ipcaif_net_setup(struct net_device *dev) priv->chnl.receive = chnl_recv_cb; priv->chnl.ctrlcmd = chnl_flowctrl_cb; priv->netdev = dev; - priv->conn_req.protocol = CAIFPROTO_DATAGRAM; - 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 = -1; priv->flowenabled = false; init_waitqueue_head(&priv->netmgmt_wq); |