296
*buf++ = sdn->sdn_objnum;
300
*buf++ = le16_to_cpu(sdn->sdn_objnamel);
301
memcpy(buf, sdn->sdn_objname, le16_to_cpu(sdn->sdn_objnamel));
302
len = 3 + le16_to_cpu(sdn->sdn_objnamel);
307
*buf++ = le16_to_cpu(sdn->sdn_objnamel);
308
memcpy(buf, sdn->sdn_objname, le16_to_cpu(sdn->sdn_objnamel));
309
len = 7 + le16_to_cpu(sdn->sdn_objnamel);
296
*buf++ = sdn->sdn_objnum;
300
*buf++ = le16_to_cpu(sdn->sdn_objnamel);
301
memcpy(buf, sdn->sdn_objname, le16_to_cpu(sdn->sdn_objnamel));
302
len = 3 + le16_to_cpu(sdn->sdn_objnamel);
307
*buf++ = le16_to_cpu(sdn->sdn_objnamel);
308
memcpy(buf, sdn->sdn_objname, le16_to_cpu(sdn->sdn_objnamel));
309
len = 7 + le16_to_cpu(sdn->sdn_objnamel);
576
576
scp->persist = dn_nsp_persist(sk);
580
dn_nsp_send_disc(sk, NSP_DISCINIT, 0, GFP_ATOMIC);
581
if (scp->nsp_rxtshift >= decnet_di_count)
586
dn_nsp_send_disc(sk, NSP_DISCINIT, 0, GFP_ATOMIC);
587
if (scp->nsp_rxtshift >= decnet_dr_count)
592
if (scp->nsp_rxtshift < decnet_dn_count) {
593
/* printk(KERN_DEBUG "dn_destroy_timer: DN\n"); */
594
dn_nsp_send_disc(sk, NSP_DISCCONF, NSP_REASON_DC, GFP_ATOMIC);
578
switch (scp->state) {
580
dn_nsp_send_disc(sk, NSP_DISCINIT, 0, GFP_ATOMIC);
581
if (scp->nsp_rxtshift >= decnet_di_count)
586
dn_nsp_send_disc(sk, NSP_DISCINIT, 0, GFP_ATOMIC);
587
if (scp->nsp_rxtshift >= decnet_dr_count)
592
if (scp->nsp_rxtshift < decnet_dn_count) {
593
/* printk(KERN_DEBUG "dn_destroy_timer: DN\n"); */
594
dn_nsp_send_disc(sk, NSP_DISCCONF, NSP_REASON_DC,
599
600
scp->persist = (HZ * decnet_time_wait);
624
625
sk->sk_state = TCP_CLOSE;
628
dn_nsp_send_disc(sk, NSP_DISCCONF, NSP_REASON_DC,
630
scp->persist_fxn = dn_destroy_timer;
631
scp->persist = dn_nsp_persist(sk);
627
switch (scp->state) {
629
dn_nsp_send_disc(sk, NSP_DISCCONF, NSP_REASON_DC,
631
scp->persist_fxn = dn_destroy_timer;
632
scp->persist = dn_nsp_persist(sk);
641
dn_nsp_send_disc(sk, NSP_DISCINIT, 0, sk->sk_allocation);
650
scp->persist_fxn = dn_destroy_timer;
651
scp->persist = dn_nsp_persist(sk);
654
printk(KERN_DEBUG "DECnet: dn_destroy_sock passed socket in invalid state\n");
656
dn_stop_slow_timer(sk);
658
dn_unhash_sock_bh(sk);
642
dn_nsp_send_disc(sk, NSP_DISCINIT, 0, sk->sk_allocation);
651
scp->persist_fxn = dn_destroy_timer;
652
scp->persist = dn_nsp_persist(sk);
655
printk(KERN_DEBUG "DECnet: dn_destroy_sock passed socket in invalid state\n");
657
dn_stop_slow_timer(sk);
659
dn_unhash_sock_bh(sk);
1363
1364
if (copy_from_user(&u, optval, optlen))
1364
1365
return -EFAULT;
1368
if (sock->state == SS_CONNECTED)
1370
if ((scp->state != DN_O) && (scp->state != DN_CR))
1373
if (optlen != sizeof(struct optdata_dn))
1376
if (le16_to_cpu(u.opt.opt_optl) > 16)
1379
memcpy(&scp->conndata_out, &u.opt, optlen);
1383
if (sock->state != SS_CONNECTED && scp->accept_mode == ACC_IMMED)
1386
if (optlen != sizeof(struct optdata_dn))
1389
if (le16_to_cpu(u.opt.opt_optl) > 16)
1392
memcpy(&scp->discdata_out, &u.opt, optlen);
1396
if (sock->state == SS_CONNECTED)
1398
if (scp->state != DN_O)
1401
if (optlen != sizeof(struct accessdata_dn))
1404
if ((u.acc.acc_accl > DN_MAXACCL) ||
1405
(u.acc.acc_passl > DN_MAXACCL) ||
1406
(u.acc.acc_userl > DN_MAXACCL))
1409
memcpy(&scp->accessdata, &u.acc, optlen);
1412
case DSO_ACCEPTMODE:
1413
if (sock->state == SS_CONNECTED)
1415
if (scp->state != DN_O)
1418
if (optlen != sizeof(int))
1421
if ((u.mode != ACC_IMMED) && (u.mode != ACC_DEFER))
1424
scp->accept_mode = (unsigned char)u.mode;
1429
if (scp->state != DN_CR)
1431
timeo = sock_rcvtimeo(sk, 0);
1432
err = dn_confirm_accept(sk, &timeo, sk->sk_allocation);
1437
if (scp->state != DN_CR)
1441
sk->sk_shutdown = SHUTDOWN_MASK;
1442
dn_nsp_send_disc(sk, 0x38, 0, sk->sk_allocation);
1369
if (sock->state == SS_CONNECTED)
1371
if ((scp->state != DN_O) && (scp->state != DN_CR))
1374
if (optlen != sizeof(struct optdata_dn))
1377
if (le16_to_cpu(u.opt.opt_optl) > 16)
1380
memcpy(&scp->conndata_out, &u.opt, optlen);
1384
if (sock->state != SS_CONNECTED &&
1385
scp->accept_mode == ACC_IMMED)
1388
if (optlen != sizeof(struct optdata_dn))
1391
if (le16_to_cpu(u.opt.opt_optl) > 16)
1394
memcpy(&scp->discdata_out, &u.opt, optlen);
1398
if (sock->state == SS_CONNECTED)
1400
if (scp->state != DN_O)
1403
if (optlen != sizeof(struct accessdata_dn))
1406
if ((u.acc.acc_accl > DN_MAXACCL) ||
1407
(u.acc.acc_passl > DN_MAXACCL) ||
1408
(u.acc.acc_userl > DN_MAXACCL))
1411
memcpy(&scp->accessdata, &u.acc, optlen);
1414
case DSO_ACCEPTMODE:
1415
if (sock->state == SS_CONNECTED)
1417
if (scp->state != DN_O)
1420
if (optlen != sizeof(int))
1423
if ((u.mode != ACC_IMMED) && (u.mode != ACC_DEFER))
1426
scp->accept_mode = (unsigned char)u.mode;
1430
if (scp->state != DN_CR)
1432
timeo = sock_rcvtimeo(sk, 0);
1433
err = dn_confirm_accept(sk, &timeo, sk->sk_allocation);
1437
if (scp->state != DN_CR)
1441
sk->sk_shutdown = SHUTDOWN_MASK;
1442
dn_nsp_send_disc(sk, 0x38, 0, sk->sk_allocation);
1446
1446
#ifdef CONFIG_NETFILTER
1447
1447
return nf_setsockopt(sk, PF_DECnet, optname, optval, optlen);
1452
return -ENOPROTOOPT;
1455
if (optlen != sizeof(unsigned long))
1457
if (u.win > NSP_MAX_WINDOW)
1458
u.win = NSP_MAX_WINDOW;
1461
scp->max_window = u.win;
1462
if (scp->snd_window > u.win)
1463
scp->snd_window = u.win;
1467
if (optlen != sizeof(int))
1469
if (scp->nonagle == 2)
1471
scp->nonagle = (u.val == 0) ? 0 : 1;
1472
/* if (scp->nonagle == 1) { Push pending frames } */
1476
if (optlen != sizeof(int))
1478
if (scp->nonagle == 1)
1480
scp->nonagle = (u.val == 0) ? 0 : 2;
1481
/* if (scp->nonagle == 0) { Push pending frames } */
1485
if (optlen != sizeof(unsigned char))
1487
if ((u.services & ~NSP_FC_MASK) != 0x01)
1489
if ((u.services & NSP_FC_MASK) == NSP_FC_MASK)
1491
scp->services_loc = u.services;
1495
if (optlen != sizeof(unsigned char))
1499
scp->info_loc = u.info;
1452
return -ENOPROTOOPT;
1455
if (optlen != sizeof(unsigned long))
1457
if (u.win > NSP_MAX_WINDOW)
1458
u.win = NSP_MAX_WINDOW;
1461
scp->max_window = u.win;
1462
if (scp->snd_window > u.win)
1463
scp->snd_window = u.win;
1467
if (optlen != sizeof(int))
1469
if (scp->nonagle == 2)
1471
scp->nonagle = (u.val == 0) ? 0 : 1;
1472
/* if (scp->nonagle == 1) { Push pending frames } */
1476
if (optlen != sizeof(int))
1478
if (scp->nonagle == 1)
1480
scp->nonagle = (u.val == 0) ? 0 : 2;
1481
/* if (scp->nonagle == 0) { Push pending frames } */
1485
if (optlen != sizeof(unsigned char))
1487
if ((u.services & ~NSP_FC_MASK) != 0x01)
1489
if ((u.services & NSP_FC_MASK) == NSP_FC_MASK)
1491
scp->services_loc = u.services;
1495
if (optlen != sizeof(unsigned char))
1499
scp->info_loc = u.info;
1527
1527
if(get_user(r_len , optlen))
1528
1528
return -EFAULT;
1532
if (r_len > sizeof(struct optdata_dn))
1533
r_len = sizeof(struct optdata_dn);
1534
r_data = &scp->conndata_in;
1538
if (r_len > sizeof(struct optdata_dn))
1539
r_len = sizeof(struct optdata_dn);
1540
r_data = &scp->discdata_in;
1544
if (r_len > sizeof(struct accessdata_dn))
1545
r_len = sizeof(struct accessdata_dn);
1546
r_data = &scp->accessdata;
1549
case DSO_ACCEPTMODE:
1550
if (r_len > sizeof(unsigned char))
1551
r_len = sizeof(unsigned char);
1552
r_data = &scp->accept_mode;
1556
if (r_len > sizeof(struct linkinfo_dn))
1557
r_len = sizeof(struct linkinfo_dn);
1559
memset(&link, 0, sizeof(link));
1561
switch(sock->state) {
1563
link.idn_linkstate = LL_CONNECTING;
1565
case SS_DISCONNECTING:
1566
link.idn_linkstate = LL_DISCONNECTING;
1569
link.idn_linkstate = LL_RUNNING;
1572
link.idn_linkstate = LL_INACTIVE;
1575
link.idn_segsize = scp->segsize_rem;
1532
if (r_len > sizeof(struct optdata_dn))
1533
r_len = sizeof(struct optdata_dn);
1534
r_data = &scp->conndata_in;
1538
if (r_len > sizeof(struct optdata_dn))
1539
r_len = sizeof(struct optdata_dn);
1540
r_data = &scp->discdata_in;
1544
if (r_len > sizeof(struct accessdata_dn))
1545
r_len = sizeof(struct accessdata_dn);
1546
r_data = &scp->accessdata;
1549
case DSO_ACCEPTMODE:
1550
if (r_len > sizeof(unsigned char))
1551
r_len = sizeof(unsigned char);
1552
r_data = &scp->accept_mode;
1556
if (r_len > sizeof(struct linkinfo_dn))
1557
r_len = sizeof(struct linkinfo_dn);
1559
memset(&link, 0, sizeof(link));
1561
switch (sock->state) {
1563
link.idn_linkstate = LL_CONNECTING;
1565
case SS_DISCONNECTING:
1566
link.idn_linkstate = LL_DISCONNECTING;
1569
link.idn_linkstate = LL_RUNNING;
1572
link.idn_linkstate = LL_INACTIVE;
1575
link.idn_segsize = scp->segsize_rem;
1580
1580
#ifdef CONFIG_NETFILTER
1584
if(get_user(len, optlen))
1587
ret = nf_getsockopt(sk, PF_DECnet, optname,
1590
ret = put_user(len, optlen);
1584
if (get_user(len, optlen))
1587
ret = nf_getsockopt(sk, PF_DECnet, optname, optval, &len);
1589
ret = put_user(len, optlen);
1598
return -ENOPROTOOPT;
1601
if (r_len > sizeof(unsigned long))
1602
r_len = sizeof(unsigned long);
1603
r_data = &scp->max_window;
1607
if (r_len > sizeof(int))
1608
r_len = sizeof(int);
1609
val = (scp->nonagle == 1);
1614
if (r_len > sizeof(int))
1615
r_len = sizeof(int);
1616
val = (scp->nonagle == 2);
1621
if (r_len > sizeof(unsigned char))
1622
r_len = sizeof(unsigned char);
1623
r_data = &scp->services_rem;
1627
if (r_len > sizeof(unsigned char))
1628
r_len = sizeof(unsigned char);
1629
r_data = &scp->info_rem;
1597
return -ENOPROTOOPT;
1600
if (r_len > sizeof(unsigned long))
1601
r_len = sizeof(unsigned long);
1602
r_data = &scp->max_window;
1606
if (r_len > sizeof(int))
1607
r_len = sizeof(int);
1608
val = (scp->nonagle == 1);
1613
if (r_len > sizeof(int))
1614
r_len = sizeof(int);
1615
val = (scp->nonagle == 2);
1620
if (r_len > sizeof(unsigned char))
1621
r_len = sizeof(unsigned char);
1622
r_data = &scp->services_rem;
1626
if (r_len > sizeof(unsigned char))
1627
r_len = sizeof(unsigned char);
1628
r_data = &scp->info_rem;