af_iucv.c (802788bf90f78e7f248e78d4d0510bb00e976db8) | af_iucv.c (09488e2e0fab14ebe41135f0d066cfe2c56ba9e5) |
---|---|
1/* 2 * linux/net/iucv/af_iucv.c 3 * 4 * IUCV protocol stack for Linux on zSeries 5 * 6 * Copyright 2006 IBM Corporation 7 * 8 * Author(s): Jennifer Hunt <jenhunt@us.ibm.com> --- 254 unchanged lines hidden (view full) --- 263 INIT_LIST_HEAD(&iucv_sk(sk)->accept_q); 264 spin_lock_init(&iucv_sk(sk)->accept_q_lock); 265 skb_queue_head_init(&iucv_sk(sk)->send_skb_q); 266 INIT_LIST_HEAD(&iucv_sk(sk)->message_q.list); 267 spin_lock_init(&iucv_sk(sk)->message_q.lock); 268 skb_queue_head_init(&iucv_sk(sk)->backlog_skb_q); 269 iucv_sk(sk)->send_tag = 0; 270 iucv_sk(sk)->flags = 0; | 1/* 2 * linux/net/iucv/af_iucv.c 3 * 4 * IUCV protocol stack for Linux on zSeries 5 * 6 * Copyright 2006 IBM Corporation 7 * 8 * Author(s): Jennifer Hunt <jenhunt@us.ibm.com> --- 254 unchanged lines hidden (view full) --- 263 INIT_LIST_HEAD(&iucv_sk(sk)->accept_q); 264 spin_lock_init(&iucv_sk(sk)->accept_q_lock); 265 skb_queue_head_init(&iucv_sk(sk)->send_skb_q); 266 INIT_LIST_HEAD(&iucv_sk(sk)->message_q.list); 267 spin_lock_init(&iucv_sk(sk)->message_q.lock); 268 skb_queue_head_init(&iucv_sk(sk)->backlog_skb_q); 269 iucv_sk(sk)->send_tag = 0; 270 iucv_sk(sk)->flags = 0; |
271 iucv_sk(sk)->msglimit = IUCV_QUEUELEN_DEFAULT; |
|
271 272 sk->sk_destruct = iucv_sock_destruct; 273 sk->sk_sndtimeo = IUCV_CONN_TIMEOUT; 274 sk->sk_allocation = GFP_DMA; 275 276 sock_reset_flag(sk, SOCK_ZAPPED); 277 278 sk->sk_protocol = proto; --- 252 unchanged lines hidden (view full) --- 531 memcpy(iucv_sk(sk)->dst_name, sa->siucv_name, 8); 532 533 high_nmcpy(user_data, sa->siucv_name); 534 low_nmcpy(user_data, iucv_sk(sk)->src_name); 535 ASCEBC(user_data, sizeof(user_data)); 536 537 iucv = iucv_sk(sk); 538 /* Create path. */ | 272 273 sk->sk_destruct = iucv_sock_destruct; 274 sk->sk_sndtimeo = IUCV_CONN_TIMEOUT; 275 sk->sk_allocation = GFP_DMA; 276 277 sock_reset_flag(sk, SOCK_ZAPPED); 278 279 sk->sk_protocol = proto; --- 252 unchanged lines hidden (view full) --- 532 memcpy(iucv_sk(sk)->dst_name, sa->siucv_name, 8); 533 534 high_nmcpy(user_data, sa->siucv_name); 535 low_nmcpy(user_data, iucv_sk(sk)->src_name); 536 ASCEBC(user_data, sizeof(user_data)); 537 538 iucv = iucv_sk(sk); 539 /* Create path. */ |
539 iucv->path = iucv_path_alloc(IUCV_QUEUELEN_DEFAULT, | 540 iucv->path = iucv_path_alloc(iucv->msglimit, |
540 IUCV_IPRMDATA, GFP_KERNEL); 541 if (!iucv->path) { 542 err = -ENOMEM; 543 goto done; 544 } 545 err = iucv_path_connect(iucv->path, &af_iucv_handler, 546 sa->siucv_user_id, NULL, user_data, sk); 547 if (err) { --- 666 unchanged lines hidden (view full) --- 1214 lock_sock(sk); 1215 switch (optname) { 1216 case SO_IPRMDATA_MSG: 1217 if (val) 1218 iucv->flags |= IUCV_IPRMDATA; 1219 else 1220 iucv->flags &= ~IUCV_IPRMDATA; 1221 break; | 541 IUCV_IPRMDATA, GFP_KERNEL); 542 if (!iucv->path) { 543 err = -ENOMEM; 544 goto done; 545 } 546 err = iucv_path_connect(iucv->path, &af_iucv_handler, 547 sa->siucv_user_id, NULL, user_data, sk); 548 if (err) { --- 666 unchanged lines hidden (view full) --- 1215 lock_sock(sk); 1216 switch (optname) { 1217 case SO_IPRMDATA_MSG: 1218 if (val) 1219 iucv->flags |= IUCV_IPRMDATA; 1220 else 1221 iucv->flags &= ~IUCV_IPRMDATA; 1222 break; |
1223 case SO_MSGLIMIT: 1224 switch (sk->sk_state) { 1225 case IUCV_OPEN: 1226 case IUCV_BOUND: 1227 if (val < 1 || val > (u16)(~0)) 1228 rc = -EINVAL; 1229 else 1230 iucv->msglimit = val; 1231 break; 1232 default: 1233 rc = -EINVAL; 1234 break; 1235 } 1236 break; |
|
1222 default: 1223 rc = -ENOPROTOOPT; 1224 break; 1225 } 1226 release_sock(sk); 1227 1228 return rc; 1229} --- 15 unchanged lines hidden (view full) --- 1245 return -EINVAL; 1246 1247 len = min_t(unsigned int, len, sizeof(int)); 1248 1249 switch (optname) { 1250 case SO_IPRMDATA_MSG: 1251 val = (iucv->flags & IUCV_IPRMDATA) ? 1 : 0; 1252 break; | 1237 default: 1238 rc = -ENOPROTOOPT; 1239 break; 1240 } 1241 release_sock(sk); 1242 1243 return rc; 1244} --- 15 unchanged lines hidden (view full) --- 1260 return -EINVAL; 1261 1262 len = min_t(unsigned int, len, sizeof(int)); 1263 1264 switch (optname) { 1265 case SO_IPRMDATA_MSG: 1266 val = (iucv->flags & IUCV_IPRMDATA) ? 1 : 0; 1267 break; |
1268 case SO_MSGLIMIT: 1269 lock_sock(sk); 1270 val = (iucv->path != NULL) ? iucv->path->msglim /* connected */ 1271 : iucv->msglimit; /* default */ 1272 release_sock(sk); 1273 break; |
|
1253 default: 1254 return -ENOPROTOOPT; 1255 } 1256 1257 if (put_user(len, optlen)) 1258 return -EFAULT; 1259 if (copy_to_user(optval, &val, len)) 1260 return -EFAULT; --- 73 unchanged lines hidden (view full) --- 1334 memcpy(niucv->src_user_id, iucv->src_user_id, 8); 1335 niucv->path = path; 1336 1337 /* Call iucv_accept */ 1338 high_nmcpy(nuser_data, ipuser + 8); 1339 memcpy(nuser_data + 8, niucv->src_name, 8); 1340 ASCEBC(nuser_data + 8, 8); 1341 | 1274 default: 1275 return -ENOPROTOOPT; 1276 } 1277 1278 if (put_user(len, optlen)) 1279 return -EFAULT; 1280 if (copy_to_user(optval, &val, len)) 1281 return -EFAULT; --- 73 unchanged lines hidden (view full) --- 1355 memcpy(niucv->src_user_id, iucv->src_user_id, 8); 1356 niucv->path = path; 1357 1358 /* Call iucv_accept */ 1359 high_nmcpy(nuser_data, ipuser + 8); 1360 memcpy(nuser_data + 8, niucv->src_name, 8); 1361 ASCEBC(nuser_data + 8, 8); 1362 |
1342 path->msglim = IUCV_QUEUELEN_DEFAULT; | 1363 /* set message limit for path based on msglimit of accepting socket */ 1364 niucv->msglimit = iucv->msglimit; 1365 path->msglim = iucv->msglimit; |
1343 err = iucv_path_accept(path, &af_iucv_handler, nuser_data, nsk); 1344 if (err) { 1345 err = iucv_path_sever(path, user_data); 1346 iucv_path_free(path); 1347 iucv_sock_kill(nsk); 1348 goto fail; 1349 } 1350 --- 202 unchanged lines hidden --- | 1366 err = iucv_path_accept(path, &af_iucv_handler, nuser_data, nsk); 1367 if (err) { 1368 err = iucv_path_sever(path, user_data); 1369 iucv_path_free(path); 1370 iucv_sock_kill(nsk); 1371 goto fail; 1372 } 1373 --- 202 unchanged lines hidden --- |