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 ---