|
@@ -291,23 +291,23 @@ int dn_sockaddr2username(struct sockaddr_dn *sdn, unsigned char *buf, unsigned c
|
|
|
|
|
|
*buf++ = type;
|
|
|
|
|
|
- switch(type) {
|
|
|
- case 0:
|
|
|
- *buf++ = sdn->sdn_objnum;
|
|
|
- break;
|
|
|
- case 1:
|
|
|
- *buf++ = 0;
|
|
|
- *buf++ = le16_to_cpu(sdn->sdn_objnamel);
|
|
|
- memcpy(buf, sdn->sdn_objname, le16_to_cpu(sdn->sdn_objnamel));
|
|
|
- len = 3 + le16_to_cpu(sdn->sdn_objnamel);
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- memset(buf, 0, 5);
|
|
|
- buf += 5;
|
|
|
- *buf++ = le16_to_cpu(sdn->sdn_objnamel);
|
|
|
- memcpy(buf, sdn->sdn_objname, le16_to_cpu(sdn->sdn_objnamel));
|
|
|
- len = 7 + le16_to_cpu(sdn->sdn_objnamel);
|
|
|
- break;
|
|
|
+ switch (type) {
|
|
|
+ case 0:
|
|
|
+ *buf++ = sdn->sdn_objnum;
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ *buf++ = 0;
|
|
|
+ *buf++ = le16_to_cpu(sdn->sdn_objnamel);
|
|
|
+ memcpy(buf, sdn->sdn_objname, le16_to_cpu(sdn->sdn_objnamel));
|
|
|
+ len = 3 + le16_to_cpu(sdn->sdn_objnamel);
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ memset(buf, 0, 5);
|
|
|
+ buf += 5;
|
|
|
+ *buf++ = le16_to_cpu(sdn->sdn_objnamel);
|
|
|
+ memcpy(buf, sdn->sdn_objname, le16_to_cpu(sdn->sdn_objnamel));
|
|
|
+ len = 7 + le16_to_cpu(sdn->sdn_objnamel);
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
return len;
|
|
@@ -337,23 +337,23 @@ int dn_username2sockaddr(unsigned char *data, int len, struct sockaddr_dn *sdn,
|
|
|
*fmt = *data++;
|
|
|
type = *data++;
|
|
|
|
|
|
- switch(*fmt) {
|
|
|
- case 0:
|
|
|
- sdn->sdn_objnum = type;
|
|
|
- return 2;
|
|
|
- case 1:
|
|
|
- namel = 16;
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- len -= 4;
|
|
|
- data += 4;
|
|
|
- break;
|
|
|
- case 4:
|
|
|
- len -= 8;
|
|
|
- data += 8;
|
|
|
- break;
|
|
|
- default:
|
|
|
- return -1;
|
|
|
+ switch (*fmt) {
|
|
|
+ case 0:
|
|
|
+ sdn->sdn_objnum = type;
|
|
|
+ return 2;
|
|
|
+ case 1:
|
|
|
+ namel = 16;
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ len -= 4;
|
|
|
+ data += 4;
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ len -= 8;
|
|
|
+ data += 8;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ return -1;
|
|
|
}
|
|
|
|
|
|
len -= 1;
|
|
@@ -575,25 +575,26 @@ int dn_destroy_timer(struct sock *sk)
|
|
|
|
|
|
scp->persist = dn_nsp_persist(sk);
|
|
|
|
|
|
- switch(scp->state) {
|
|
|
- case DN_DI:
|
|
|
- dn_nsp_send_disc(sk, NSP_DISCINIT, 0, GFP_ATOMIC);
|
|
|
- if (scp->nsp_rxtshift >= decnet_di_count)
|
|
|
- scp->state = DN_CN;
|
|
|
- return 0;
|
|
|
+ switch (scp->state) {
|
|
|
+ case DN_DI:
|
|
|
+ dn_nsp_send_disc(sk, NSP_DISCINIT, 0, GFP_ATOMIC);
|
|
|
+ if (scp->nsp_rxtshift >= decnet_di_count)
|
|
|
+ scp->state = DN_CN;
|
|
|
+ return 0;
|
|
|
|
|
|
- case DN_DR:
|
|
|
- dn_nsp_send_disc(sk, NSP_DISCINIT, 0, GFP_ATOMIC);
|
|
|
- if (scp->nsp_rxtshift >= decnet_dr_count)
|
|
|
- scp->state = DN_DRC;
|
|
|
- return 0;
|
|
|
+ case DN_DR:
|
|
|
+ dn_nsp_send_disc(sk, NSP_DISCINIT, 0, GFP_ATOMIC);
|
|
|
+ if (scp->nsp_rxtshift >= decnet_dr_count)
|
|
|
+ scp->state = DN_DRC;
|
|
|
+ return 0;
|
|
|
|
|
|
- case DN_DN:
|
|
|
- if (scp->nsp_rxtshift < decnet_dn_count) {
|
|
|
- /* printk(KERN_DEBUG "dn_destroy_timer: DN\n"); */
|
|
|
- dn_nsp_send_disc(sk, NSP_DISCCONF, NSP_REASON_DC, GFP_ATOMIC);
|
|
|
- return 0;
|
|
|
- }
|
|
|
+ case DN_DN:
|
|
|
+ if (scp->nsp_rxtshift < decnet_dn_count) {
|
|
|
+ /* printk(KERN_DEBUG "dn_destroy_timer: DN\n"); */
|
|
|
+ dn_nsp_send_disc(sk, NSP_DISCCONF, NSP_REASON_DC,
|
|
|
+ GFP_ATOMIC);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
scp->persist = (HZ * decnet_time_wait);
|
|
@@ -623,42 +624,42 @@ static void dn_destroy_sock(struct sock *sk)
|
|
|
|
|
|
sk->sk_state = TCP_CLOSE;
|
|
|
|
|
|
- switch(scp->state) {
|
|
|
- case DN_DN:
|
|
|
- dn_nsp_send_disc(sk, NSP_DISCCONF, NSP_REASON_DC,
|
|
|
- sk->sk_allocation);
|
|
|
- scp->persist_fxn = dn_destroy_timer;
|
|
|
- scp->persist = dn_nsp_persist(sk);
|
|
|
- break;
|
|
|
- case DN_CR:
|
|
|
- scp->state = DN_DR;
|
|
|
- goto disc_reject;
|
|
|
- case DN_RUN:
|
|
|
- scp->state = DN_DI;
|
|
|
- case DN_DI:
|
|
|
- case DN_DR:
|
|
|
+ switch (scp->state) {
|
|
|
+ case DN_DN:
|
|
|
+ dn_nsp_send_disc(sk, NSP_DISCCONF, NSP_REASON_DC,
|
|
|
+ sk->sk_allocation);
|
|
|
+ scp->persist_fxn = dn_destroy_timer;
|
|
|
+ scp->persist = dn_nsp_persist(sk);
|
|
|
+ break;
|
|
|
+ case DN_CR:
|
|
|
+ scp->state = DN_DR;
|
|
|
+ goto disc_reject;
|
|
|
+ case DN_RUN:
|
|
|
+ scp->state = DN_DI;
|
|
|
+ case DN_DI:
|
|
|
+ case DN_DR:
|
|
|
disc_reject:
|
|
|
- dn_nsp_send_disc(sk, NSP_DISCINIT, 0, sk->sk_allocation);
|
|
|
- case DN_NC:
|
|
|
- case DN_NR:
|
|
|
- case DN_RJ:
|
|
|
- case DN_DIC:
|
|
|
- case DN_CN:
|
|
|
- case DN_DRC:
|
|
|
- case DN_CI:
|
|
|
- case DN_CD:
|
|
|
- scp->persist_fxn = dn_destroy_timer;
|
|
|
- scp->persist = dn_nsp_persist(sk);
|
|
|
- break;
|
|
|
- default:
|
|
|
- printk(KERN_DEBUG "DECnet: dn_destroy_sock passed socket in invalid state\n");
|
|
|
- case DN_O:
|
|
|
- dn_stop_slow_timer(sk);
|
|
|
+ dn_nsp_send_disc(sk, NSP_DISCINIT, 0, sk->sk_allocation);
|
|
|
+ case DN_NC:
|
|
|
+ case DN_NR:
|
|
|
+ case DN_RJ:
|
|
|
+ case DN_DIC:
|
|
|
+ case DN_CN:
|
|
|
+ case DN_DRC:
|
|
|
+ case DN_CI:
|
|
|
+ case DN_CD:
|
|
|
+ scp->persist_fxn = dn_destroy_timer;
|
|
|
+ scp->persist = dn_nsp_persist(sk);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ printk(KERN_DEBUG "DECnet: dn_destroy_sock passed socket in invalid state\n");
|
|
|
+ case DN_O:
|
|
|
+ dn_stop_slow_timer(sk);
|
|
|
|
|
|
- dn_unhash_sock_bh(sk);
|
|
|
- sock_put(sk);
|
|
|
+ dn_unhash_sock_bh(sk);
|
|
|
+ sock_put(sk);
|
|
|
|
|
|
- break;
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -683,15 +684,15 @@ static int dn_create(struct net *net, struct socket *sock, int protocol,
|
|
|
if (!net_eq(net, &init_net))
|
|
|
return -EAFNOSUPPORT;
|
|
|
|
|
|
- switch(sock->type) {
|
|
|
- case SOCK_SEQPACKET:
|
|
|
- if (protocol != DNPROTO_NSP)
|
|
|
- return -EPROTONOSUPPORT;
|
|
|
- break;
|
|
|
- case SOCK_STREAM:
|
|
|
- break;
|
|
|
- default:
|
|
|
- return -ESOCKTNOSUPPORT;
|
|
|
+ switch (sock->type) {
|
|
|
+ case SOCK_SEQPACKET:
|
|
|
+ if (protocol != DNPROTO_NSP)
|
|
|
+ return -EPROTONOSUPPORT;
|
|
|
+ break;
|
|
|
+ case SOCK_STREAM:
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ return -ESOCKTNOSUPPORT;
|
|
|
}
|
|
|
|
|
|
|
|
@@ -987,16 +988,16 @@ static inline int dn_check_state(struct sock *sk, struct sockaddr_dn *addr, int
|
|
|
{
|
|
|
struct dn_scp *scp = DN_SK(sk);
|
|
|
|
|
|
- switch(scp->state) {
|
|
|
- case DN_RUN:
|
|
|
- return 0;
|
|
|
- case DN_CR:
|
|
|
- return dn_confirm_accept(sk, timeo, sk->sk_allocation);
|
|
|
- case DN_CI:
|
|
|
- case DN_CC:
|
|
|
- return dn_wait_run(sk, timeo);
|
|
|
- case DN_O:
|
|
|
- return __dn_connect(sk, addr, addrlen, timeo, flags);
|
|
|
+ switch (scp->state) {
|
|
|
+ case DN_RUN:
|
|
|
+ return 0;
|
|
|
+ case DN_CR:
|
|
|
+ return dn_confirm_accept(sk, timeo, sk->sk_allocation);
|
|
|
+ case DN_CI:
|
|
|
+ case DN_CC:
|
|
|
+ return dn_wait_run(sk, timeo);
|
|
|
+ case DN_O:
|
|
|
+ return __dn_connect(sk, addr, addrlen, timeo, flags);
|
|
|
}
|
|
|
|
|
|
return -EINVAL;
|
|
@@ -1363,141 +1364,140 @@ static int __dn_setsockopt(struct socket *sock, int level,int optname, char __us
|
|
|
if (copy_from_user(&u, optval, optlen))
|
|
|
return -EFAULT;
|
|
|
|
|
|
- switch(optname) {
|
|
|
- case DSO_CONDATA:
|
|
|
- if (sock->state == SS_CONNECTED)
|
|
|
- return -EISCONN;
|
|
|
- if ((scp->state != DN_O) && (scp->state != DN_CR))
|
|
|
- return -EINVAL;
|
|
|
+ switch (optname) {
|
|
|
+ case DSO_CONDATA:
|
|
|
+ if (sock->state == SS_CONNECTED)
|
|
|
+ return -EISCONN;
|
|
|
+ if ((scp->state != DN_O) && (scp->state != DN_CR))
|
|
|
+ return -EINVAL;
|
|
|
|
|
|
- if (optlen != sizeof(struct optdata_dn))
|
|
|
- return -EINVAL;
|
|
|
+ if (optlen != sizeof(struct optdata_dn))
|
|
|
+ return -EINVAL;
|
|
|
|
|
|
- if (le16_to_cpu(u.opt.opt_optl) > 16)
|
|
|
- return -EINVAL;
|
|
|
+ if (le16_to_cpu(u.opt.opt_optl) > 16)
|
|
|
+ return -EINVAL;
|
|
|
|
|
|
- memcpy(&scp->conndata_out, &u.opt, optlen);
|
|
|
- break;
|
|
|
-
|
|
|
- case DSO_DISDATA:
|
|
|
- if (sock->state != SS_CONNECTED && scp->accept_mode == ACC_IMMED)
|
|
|
- return -ENOTCONN;
|
|
|
-
|
|
|
- if (optlen != sizeof(struct optdata_dn))
|
|
|
- return -EINVAL;
|
|
|
+ memcpy(&scp->conndata_out, &u.opt, optlen);
|
|
|
+ break;
|
|
|
|
|
|
- if (le16_to_cpu(u.opt.opt_optl) > 16)
|
|
|
- return -EINVAL;
|
|
|
+ case DSO_DISDATA:
|
|
|
+ if (sock->state != SS_CONNECTED &&
|
|
|
+ scp->accept_mode == ACC_IMMED)
|
|
|
+ return -ENOTCONN;
|
|
|
|
|
|
- memcpy(&scp->discdata_out, &u.opt, optlen);
|
|
|
- break;
|
|
|
+ if (optlen != sizeof(struct optdata_dn))
|
|
|
+ return -EINVAL;
|
|
|
|
|
|
- case DSO_CONACCESS:
|
|
|
- if (sock->state == SS_CONNECTED)
|
|
|
- return -EISCONN;
|
|
|
- if (scp->state != DN_O)
|
|
|
- return -EINVAL;
|
|
|
+ if (le16_to_cpu(u.opt.opt_optl) > 16)
|
|
|
+ return -EINVAL;
|
|
|
|
|
|
- if (optlen != sizeof(struct accessdata_dn))
|
|
|
- return -EINVAL;
|
|
|
+ memcpy(&scp->discdata_out, &u.opt, optlen);
|
|
|
+ break;
|
|
|
|
|
|
- if ((u.acc.acc_accl > DN_MAXACCL) ||
|
|
|
- (u.acc.acc_passl > DN_MAXACCL) ||
|
|
|
- (u.acc.acc_userl > DN_MAXACCL))
|
|
|
- return -EINVAL;
|
|
|
+ case DSO_CONACCESS:
|
|
|
+ if (sock->state == SS_CONNECTED)
|
|
|
+ return -EISCONN;
|
|
|
+ if (scp->state != DN_O)
|
|
|
+ return -EINVAL;
|
|
|
|
|
|
- memcpy(&scp->accessdata, &u.acc, optlen);
|
|
|
- break;
|
|
|
+ if (optlen != sizeof(struct accessdata_dn))
|
|
|
+ return -EINVAL;
|
|
|
|
|
|
- case DSO_ACCEPTMODE:
|
|
|
- if (sock->state == SS_CONNECTED)
|
|
|
- return -EISCONN;
|
|
|
- if (scp->state != DN_O)
|
|
|
- return -EINVAL;
|
|
|
+ if ((u.acc.acc_accl > DN_MAXACCL) ||
|
|
|
+ (u.acc.acc_passl > DN_MAXACCL) ||
|
|
|
+ (u.acc.acc_userl > DN_MAXACCL))
|
|
|
+ return -EINVAL;
|
|
|
|
|
|
- if (optlen != sizeof(int))
|
|
|
- return -EINVAL;
|
|
|
+ memcpy(&scp->accessdata, &u.acc, optlen);
|
|
|
+ break;
|
|
|
|
|
|
- if ((u.mode != ACC_IMMED) && (u.mode != ACC_DEFER))
|
|
|
- return -EINVAL;
|
|
|
+ case DSO_ACCEPTMODE:
|
|
|
+ if (sock->state == SS_CONNECTED)
|
|
|
+ return -EISCONN;
|
|
|
+ if (scp->state != DN_O)
|
|
|
+ return -EINVAL;
|
|
|
|
|
|
- scp->accept_mode = (unsigned char)u.mode;
|
|
|
- break;
|
|
|
+ if (optlen != sizeof(int))
|
|
|
+ return -EINVAL;
|
|
|
|
|
|
- case DSO_CONACCEPT:
|
|
|
+ if ((u.mode != ACC_IMMED) && (u.mode != ACC_DEFER))
|
|
|
+ return -EINVAL;
|
|
|
|
|
|
- if (scp->state != DN_CR)
|
|
|
- return -EINVAL;
|
|
|
- timeo = sock_rcvtimeo(sk, 0);
|
|
|
- err = dn_confirm_accept(sk, &timeo, sk->sk_allocation);
|
|
|
- return err;
|
|
|
+ scp->accept_mode = (unsigned char)u.mode;
|
|
|
+ break;
|
|
|
|
|
|
- case DSO_CONREJECT:
|
|
|
+ case DSO_CONACCEPT:
|
|
|
+ if (scp->state != DN_CR)
|
|
|
+ return -EINVAL;
|
|
|
+ timeo = sock_rcvtimeo(sk, 0);
|
|
|
+ err = dn_confirm_accept(sk, &timeo, sk->sk_allocation);
|
|
|
+ return err;
|
|
|
|
|
|
- if (scp->state != DN_CR)
|
|
|
- return -EINVAL;
|
|
|
+ case DSO_CONREJECT:
|
|
|
+ if (scp->state != DN_CR)
|
|
|
+ return -EINVAL;
|
|
|
|
|
|
- scp->state = DN_DR;
|
|
|
- sk->sk_shutdown = SHUTDOWN_MASK;
|
|
|
- dn_nsp_send_disc(sk, 0x38, 0, sk->sk_allocation);
|
|
|
- break;
|
|
|
+ scp->state = DN_DR;
|
|
|
+ sk->sk_shutdown = SHUTDOWN_MASK;
|
|
|
+ dn_nsp_send_disc(sk, 0x38, 0, sk->sk_allocation);
|
|
|
+ break;
|
|
|
|
|
|
- default:
|
|
|
+ default:
|
|
|
#ifdef CONFIG_NETFILTER
|
|
|
return nf_setsockopt(sk, PF_DECnet, optname, optval, optlen);
|
|
|
#endif
|
|
|
- case DSO_LINKINFO:
|
|
|
- case DSO_STREAM:
|
|
|
- case DSO_SEQPACKET:
|
|
|
- return -ENOPROTOOPT;
|
|
|
-
|
|
|
- case DSO_MAXWINDOW:
|
|
|
- if (optlen != sizeof(unsigned long))
|
|
|
- return -EINVAL;
|
|
|
- if (u.win > NSP_MAX_WINDOW)
|
|
|
- u.win = NSP_MAX_WINDOW;
|
|
|
- if (u.win == 0)
|
|
|
- return -EINVAL;
|
|
|
- scp->max_window = u.win;
|
|
|
- if (scp->snd_window > u.win)
|
|
|
- scp->snd_window = u.win;
|
|
|
- break;
|
|
|
+ case DSO_LINKINFO:
|
|
|
+ case DSO_STREAM:
|
|
|
+ case DSO_SEQPACKET:
|
|
|
+ return -ENOPROTOOPT;
|
|
|
+
|
|
|
+ case DSO_MAXWINDOW:
|
|
|
+ if (optlen != sizeof(unsigned long))
|
|
|
+ return -EINVAL;
|
|
|
+ if (u.win > NSP_MAX_WINDOW)
|
|
|
+ u.win = NSP_MAX_WINDOW;
|
|
|
+ if (u.win == 0)
|
|
|
+ return -EINVAL;
|
|
|
+ scp->max_window = u.win;
|
|
|
+ if (scp->snd_window > u.win)
|
|
|
+ scp->snd_window = u.win;
|
|
|
+ break;
|
|
|
|
|
|
- case DSO_NODELAY:
|
|
|
- if (optlen != sizeof(int))
|
|
|
- return -EINVAL;
|
|
|
- if (scp->nonagle == 2)
|
|
|
- return -EINVAL;
|
|
|
- scp->nonagle = (u.val == 0) ? 0 : 1;
|
|
|
- /* if (scp->nonagle == 1) { Push pending frames } */
|
|
|
- break;
|
|
|
+ case DSO_NODELAY:
|
|
|
+ if (optlen != sizeof(int))
|
|
|
+ return -EINVAL;
|
|
|
+ if (scp->nonagle == 2)
|
|
|
+ return -EINVAL;
|
|
|
+ scp->nonagle = (u.val == 0) ? 0 : 1;
|
|
|
+ /* if (scp->nonagle == 1) { Push pending frames } */
|
|
|
+ break;
|
|
|
|
|
|
- case DSO_CORK:
|
|
|
- if (optlen != sizeof(int))
|
|
|
- return -EINVAL;
|
|
|
- if (scp->nonagle == 1)
|
|
|
- return -EINVAL;
|
|
|
- scp->nonagle = (u.val == 0) ? 0 : 2;
|
|
|
- /* if (scp->nonagle == 0) { Push pending frames } */
|
|
|
- break;
|
|
|
+ case DSO_CORK:
|
|
|
+ if (optlen != sizeof(int))
|
|
|
+ return -EINVAL;
|
|
|
+ if (scp->nonagle == 1)
|
|
|
+ return -EINVAL;
|
|
|
+ scp->nonagle = (u.val == 0) ? 0 : 2;
|
|
|
+ /* if (scp->nonagle == 0) { Push pending frames } */
|
|
|
+ break;
|
|
|
|
|
|
- case DSO_SERVICES:
|
|
|
- if (optlen != sizeof(unsigned char))
|
|
|
- return -EINVAL;
|
|
|
- if ((u.services & ~NSP_FC_MASK) != 0x01)
|
|
|
- return -EINVAL;
|
|
|
- if ((u.services & NSP_FC_MASK) == NSP_FC_MASK)
|
|
|
- return -EINVAL;
|
|
|
- scp->services_loc = u.services;
|
|
|
- break;
|
|
|
+ case DSO_SERVICES:
|
|
|
+ if (optlen != sizeof(unsigned char))
|
|
|
+ return -EINVAL;
|
|
|
+ if ((u.services & ~NSP_FC_MASK) != 0x01)
|
|
|
+ return -EINVAL;
|
|
|
+ if ((u.services & NSP_FC_MASK) == NSP_FC_MASK)
|
|
|
+ return -EINVAL;
|
|
|
+ scp->services_loc = u.services;
|
|
|
+ break;
|
|
|
|
|
|
- case DSO_INFO:
|
|
|
- if (optlen != sizeof(unsigned char))
|
|
|
- return -EINVAL;
|
|
|
- if (u.info & 0xfc)
|
|
|
- return -EINVAL;
|
|
|
- scp->info_loc = u.info;
|
|
|
- break;
|
|
|
+ case DSO_INFO:
|
|
|
+ if (optlen != sizeof(unsigned char))
|
|
|
+ return -EINVAL;
|
|
|
+ if (u.info & 0xfc)
|
|
|
+ return -EINVAL;
|
|
|
+ scp->info_loc = u.info;
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
@@ -1527,107 +1527,106 @@ static int __dn_getsockopt(struct socket *sock, int level,int optname, char __us
|
|
|
if(get_user(r_len , optlen))
|
|
|
return -EFAULT;
|
|
|
|
|
|
- switch(optname) {
|
|
|
- case DSO_CONDATA:
|
|
|
- if (r_len > sizeof(struct optdata_dn))
|
|
|
- r_len = sizeof(struct optdata_dn);
|
|
|
- r_data = &scp->conndata_in;
|
|
|
- break;
|
|
|
-
|
|
|
- case DSO_DISDATA:
|
|
|
- if (r_len > sizeof(struct optdata_dn))
|
|
|
- r_len = sizeof(struct optdata_dn);
|
|
|
- r_data = &scp->discdata_in;
|
|
|
- break;
|
|
|
+ switch (optname) {
|
|
|
+ case DSO_CONDATA:
|
|
|
+ if (r_len > sizeof(struct optdata_dn))
|
|
|
+ r_len = sizeof(struct optdata_dn);
|
|
|
+ r_data = &scp->conndata_in;
|
|
|
+ break;
|
|
|
|
|
|
- case DSO_CONACCESS:
|
|
|
- if (r_len > sizeof(struct accessdata_dn))
|
|
|
- r_len = sizeof(struct accessdata_dn);
|
|
|
- r_data = &scp->accessdata;
|
|
|
- break;
|
|
|
+ case DSO_DISDATA:
|
|
|
+ if (r_len > sizeof(struct optdata_dn))
|
|
|
+ r_len = sizeof(struct optdata_dn);
|
|
|
+ r_data = &scp->discdata_in;
|
|
|
+ break;
|
|
|
|
|
|
- case DSO_ACCEPTMODE:
|
|
|
- if (r_len > sizeof(unsigned char))
|
|
|
- r_len = sizeof(unsigned char);
|
|
|
- r_data = &scp->accept_mode;
|
|
|
- break;
|
|
|
+ case DSO_CONACCESS:
|
|
|
+ if (r_len > sizeof(struct accessdata_dn))
|
|
|
+ r_len = sizeof(struct accessdata_dn);
|
|
|
+ r_data = &scp->accessdata;
|
|
|
+ break;
|
|
|
|
|
|
- case DSO_LINKINFO:
|
|
|
- if (r_len > sizeof(struct linkinfo_dn))
|
|
|
- r_len = sizeof(struct linkinfo_dn);
|
|
|
+ case DSO_ACCEPTMODE:
|
|
|
+ if (r_len > sizeof(unsigned char))
|
|
|
+ r_len = sizeof(unsigned char);
|
|
|
+ r_data = &scp->accept_mode;
|
|
|
+ break;
|
|
|
|
|
|
- memset(&link, 0, sizeof(link));
|
|
|
+ case DSO_LINKINFO:
|
|
|
+ if (r_len > sizeof(struct linkinfo_dn))
|
|
|
+ r_len = sizeof(struct linkinfo_dn);
|
|
|
|
|
|
- switch(sock->state) {
|
|
|
- case SS_CONNECTING:
|
|
|
- link.idn_linkstate = LL_CONNECTING;
|
|
|
- break;
|
|
|
- case SS_DISCONNECTING:
|
|
|
- link.idn_linkstate = LL_DISCONNECTING;
|
|
|
- break;
|
|
|
- case SS_CONNECTED:
|
|
|
- link.idn_linkstate = LL_RUNNING;
|
|
|
- break;
|
|
|
- default:
|
|
|
- link.idn_linkstate = LL_INACTIVE;
|
|
|
- }
|
|
|
+ memset(&link, 0, sizeof(link));
|
|
|
|
|
|
- link.idn_segsize = scp->segsize_rem;
|
|
|
- r_data = &link;
|
|
|
+ switch (sock->state) {
|
|
|
+ case SS_CONNECTING:
|
|
|
+ link.idn_linkstate = LL_CONNECTING;
|
|
|
+ break;
|
|
|
+ case SS_DISCONNECTING:
|
|
|
+ link.idn_linkstate = LL_DISCONNECTING;
|
|
|
+ break;
|
|
|
+ case SS_CONNECTED:
|
|
|
+ link.idn_linkstate = LL_RUNNING;
|
|
|
break;
|
|
|
-
|
|
|
default:
|
|
|
+ link.idn_linkstate = LL_INACTIVE;
|
|
|
+ }
|
|
|
+
|
|
|
+ link.idn_segsize = scp->segsize_rem;
|
|
|
+ r_data = &link;
|
|
|
+ break;
|
|
|
+
|
|
|
+ default:
|
|
|
#ifdef CONFIG_NETFILTER
|
|
|
- {
|
|
|
- int ret, len;
|
|
|
+ {
|
|
|
+ int ret, len;
|
|
|
|
|
|
- if(get_user(len, optlen))
|
|
|
- return -EFAULT;
|
|
|
+ if (get_user(len, optlen))
|
|
|
+ return -EFAULT;
|
|
|
|
|
|
- ret = nf_getsockopt(sk, PF_DECnet, optname,
|
|
|
- optval, &len);
|
|
|
- if (ret >= 0)
|
|
|
- ret = put_user(len, optlen);
|
|
|
- return ret;
|
|
|
- }
|
|
|
+ ret = nf_getsockopt(sk, PF_DECnet, optname, optval, &len);
|
|
|
+ if (ret >= 0)
|
|
|
+ ret = put_user(len, optlen);
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
#endif
|
|
|
- case DSO_STREAM:
|
|
|
- case DSO_SEQPACKET:
|
|
|
- case DSO_CONACCEPT:
|
|
|
- case DSO_CONREJECT:
|
|
|
- return -ENOPROTOOPT;
|
|
|
-
|
|
|
- case DSO_MAXWINDOW:
|
|
|
- if (r_len > sizeof(unsigned long))
|
|
|
- r_len = sizeof(unsigned long);
|
|
|
- r_data = &scp->max_window;
|
|
|
- break;
|
|
|
+ case DSO_STREAM:
|
|
|
+ case DSO_SEQPACKET:
|
|
|
+ case DSO_CONACCEPT:
|
|
|
+ case DSO_CONREJECT:
|
|
|
+ return -ENOPROTOOPT;
|
|
|
+
|
|
|
+ case DSO_MAXWINDOW:
|
|
|
+ if (r_len > sizeof(unsigned long))
|
|
|
+ r_len = sizeof(unsigned long);
|
|
|
+ r_data = &scp->max_window;
|
|
|
+ break;
|
|
|
|
|
|
- case DSO_NODELAY:
|
|
|
- if (r_len > sizeof(int))
|
|
|
- r_len = sizeof(int);
|
|
|
- val = (scp->nonagle == 1);
|
|
|
- r_data = &val;
|
|
|
- break;
|
|
|
+ case DSO_NODELAY:
|
|
|
+ if (r_len > sizeof(int))
|
|
|
+ r_len = sizeof(int);
|
|
|
+ val = (scp->nonagle == 1);
|
|
|
+ r_data = &val;
|
|
|
+ break;
|
|
|
|
|
|
- case DSO_CORK:
|
|
|
- if (r_len > sizeof(int))
|
|
|
- r_len = sizeof(int);
|
|
|
- val = (scp->nonagle == 2);
|
|
|
- r_data = &val;
|
|
|
- break;
|
|
|
+ case DSO_CORK:
|
|
|
+ if (r_len > sizeof(int))
|
|
|
+ r_len = sizeof(int);
|
|
|
+ val = (scp->nonagle == 2);
|
|
|
+ r_data = &val;
|
|
|
+ break;
|
|
|
|
|
|
- case DSO_SERVICES:
|
|
|
- if (r_len > sizeof(unsigned char))
|
|
|
- r_len = sizeof(unsigned char);
|
|
|
- r_data = &scp->services_rem;
|
|
|
- break;
|
|
|
+ case DSO_SERVICES:
|
|
|
+ if (r_len > sizeof(unsigned char))
|
|
|
+ r_len = sizeof(unsigned char);
|
|
|
+ r_data = &scp->services_rem;
|
|
|
+ break;
|
|
|
|
|
|
- case DSO_INFO:
|
|
|
- if (r_len > sizeof(unsigned char))
|
|
|
- r_len = sizeof(unsigned char);
|
|
|
- r_data = &scp->info_rem;
|
|
|
- break;
|
|
|
+ case DSO_INFO:
|
|
|
+ if (r_len > sizeof(unsigned char))
|
|
|
+ r_len = sizeof(unsigned char);
|
|
|
+ r_data = &scp->info_rem;
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
if (r_data) {
|
|
@@ -2088,15 +2087,15 @@ static int dn_device_event(struct notifier_block *this, unsigned long event,
|
|
|
if (!net_eq(dev_net(dev), &init_net))
|
|
|
return NOTIFY_DONE;
|
|
|
|
|
|
- switch(event) {
|
|
|
- case NETDEV_UP:
|
|
|
- dn_dev_up(dev);
|
|
|
- break;
|
|
|
- case NETDEV_DOWN:
|
|
|
- dn_dev_down(dev);
|
|
|
- break;
|
|
|
- default:
|
|
|
- break;
|
|
|
+ switch (event) {
|
|
|
+ case NETDEV_UP:
|
|
|
+ dn_dev_up(dev);
|
|
|
+ break;
|
|
|
+ case NETDEV_DOWN:
|
|
|
+ dn_dev_down(dev);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
return NOTIFY_DONE;
|
|
@@ -2209,54 +2208,54 @@ static void dn_printable_object(struct sockaddr_dn *dn, unsigned char *buf)
|
|
|
int i;
|
|
|
|
|
|
switch (le16_to_cpu(dn->sdn_objnamel)) {
|
|
|
- case 0:
|
|
|
- sprintf(buf, "%d", dn->sdn_objnum);
|
|
|
- break;
|
|
|
- default:
|
|
|
- for (i = 0; i < le16_to_cpu(dn->sdn_objnamel); i++) {
|
|
|
- buf[i] = dn->sdn_objname[i];
|
|
|
- if (IS_NOT_PRINTABLE(buf[i]))
|
|
|
- buf[i] = '.';
|
|
|
- }
|
|
|
- buf[i] = 0;
|
|
|
+ case 0:
|
|
|
+ sprintf(buf, "%d", dn->sdn_objnum);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ for (i = 0; i < le16_to_cpu(dn->sdn_objnamel); i++) {
|
|
|
+ buf[i] = dn->sdn_objname[i];
|
|
|
+ if (IS_NOT_PRINTABLE(buf[i]))
|
|
|
+ buf[i] = '.';
|
|
|
+ }
|
|
|
+ buf[i] = 0;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
static char *dn_state2asc(unsigned char state)
|
|
|
{
|
|
|
- switch(state) {
|
|
|
- case DN_O:
|
|
|
- return "OPEN";
|
|
|
- case DN_CR:
|
|
|
- return " CR";
|
|
|
- case DN_DR:
|
|
|
- return " DR";
|
|
|
- case DN_DRC:
|
|
|
- return " DRC";
|
|
|
- case DN_CC:
|
|
|
- return " CC";
|
|
|
- case DN_CI:
|
|
|
- return " CI";
|
|
|
- case DN_NR:
|
|
|
- return " NR";
|
|
|
- case DN_NC:
|
|
|
- return " NC";
|
|
|
- case DN_CD:
|
|
|
- return " CD";
|
|
|
- case DN_RJ:
|
|
|
- return " RJ";
|
|
|
- case DN_RUN:
|
|
|
- return " RUN";
|
|
|
- case DN_DI:
|
|
|
- return " DI";
|
|
|
- case DN_DIC:
|
|
|
- return " DIC";
|
|
|
- case DN_DN:
|
|
|
- return " DN";
|
|
|
- case DN_CL:
|
|
|
- return " CL";
|
|
|
- case DN_CN:
|
|
|
- return " CN";
|
|
|
+ switch (state) {
|
|
|
+ case DN_O:
|
|
|
+ return "OPEN";
|
|
|
+ case DN_CR:
|
|
|
+ return " CR";
|
|
|
+ case DN_DR:
|
|
|
+ return " DR";
|
|
|
+ case DN_DRC:
|
|
|
+ return " DRC";
|
|
|
+ case DN_CC:
|
|
|
+ return " CC";
|
|
|
+ case DN_CI:
|
|
|
+ return " CI";
|
|
|
+ case DN_NR:
|
|
|
+ return " NR";
|
|
|
+ case DN_NC:
|
|
|
+ return " NC";
|
|
|
+ case DN_CD:
|
|
|
+ return " CD";
|
|
|
+ case DN_RJ:
|
|
|
+ return " RJ";
|
|
|
+ case DN_RUN:
|
|
|
+ return " RUN";
|
|
|
+ case DN_DI:
|
|
|
+ return " DI";
|
|
|
+ case DN_DIC:
|
|
|
+ return " DIC";
|
|
|
+ case DN_DN:
|
|
|
+ return " DN";
|
|
|
+ case DN_CL:
|
|
|
+ return " CL";
|
|
|
+ case DN_CN:
|
|
|
+ return " CN";
|
|
|
}
|
|
|
|
|
|
return "????";
|