aboutsummaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorAndre Carvalho de Matos <andre.carvalho.matos@stericsson.com>2010-09-29 13:20:25 +0200
committerJonas ABERG <jonas.aberg@stericsson.com>2011-05-05 07:57:40 +0200
commit4129e39222bb205c69949edf6a7af252913d5f3f (patch)
treef569277707f0b608d101e86dd57d631d3916c40a /net
parenteeb29bf4116bd4420e261bc703d6300b0ed4d5d6 (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.c4
-rw-r--r--net/caif/caif_socket.c27
-rw-r--r--net/caif/chnl_net.c5
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);