Lines Matching +full:super +full:- +full:frames

1 // SPDX-License-Identifier: GPL-2.0-or-later
69 * frames into AX.25 which will be sent through an AX.25 device, so form a
70 * special "super class" of normal net devices; split their locks off into a
80 lockdep_set_class(&txq->_xmit_lock, &rose_netdev_xmit_lock_key);
85 lockdep_set_class(&dev->addr_list_lock, &rose_netdev_addr_lock_key);
94 if (addr->rose_addr[0] == 0x00 && addr->rose_addr[1] == 0x00 &&
95 addr->rose_addr[2] == 0x00 && addr->rose_addr[3] == 0x00 &&
96 addr->rose_addr[4] == 0x00) {
99 sprintf(buf, "%02X%02X%02X%02X%02X", addr->rose_addr[0] & 0xFF,
100 addr->rose_addr[1] & 0xFF,
101 addr->rose_addr[2] & 0xFF,
102 addr->rose_addr[3] & 0xFF,
103 addr->rose_addr[4] & 0xFF);
117 if (addr1->rose_addr[i] != addr2->rose_addr[i])
138 if ((addr1->rose_addr[j] & 0x0F) != (addr2->rose_addr[j] & 0x0F))
141 if ((addr1->rose_addr[j] & 0xF0) != (addr2->rose_addr[j] & 0xF0))
171 if (rose->neighbour == neigh) {
173 rose_neigh_put(rose->neighbour);
174 rose->neighbour = NULL;
196 if (rose->device == dev) {
212 if (rose->device == dev) {
214 if (rose->neighbour)
215 rose_neigh_put(rose->neighbour);
216 netdev_put(rose->device, &rose->dev_tracker);
217 rose->device = NULL;
242 switch (dev->type) {
278 if (!rosecmp(&rose->source_addr, addr) &&
279 !ax25cmp(&rose->source_call, call) &&
280 !rose->source_ndigis && s->sk_state == TCP_LISTEN)
287 if (!rosecmp(&rose->source_addr, addr) &&
288 !ax25cmp(&rose->source_call, &null_ax25_address) &&
289 s->sk_state == TCP_LISTEN)
309 if (rose->lci == lci && rose->neighbour == neigh)
325 if (neigh->dce_mode) {
330 for (lci = sysctl_rose_maximum_vcs; lci > 0; lci--)
357 * will touch it and we are (fairly 8-) ) safe.
370 while ((skb = skb_dequeue(&sk->sk_receive_queue)) != NULL) {
371 if (skb->sk != sk) { /* A pending connection */
373 sock_set_flag(skb->sk, SOCK_DEAD);
374 rose_start_heartbeat(skb->sk);
375 rose_sk(skb->sk)->state = ROSE_STATE_0;
383 timer_setup(&sk->sk_timer, rose_destroy_timer, 0);
384 sk->sk_timer.expires = jiffies + 10 * HZ;
385 add_timer(&sk->sk_timer);
398 struct sock *sk = sock->sk;
403 return -ENOPROTOOPT;
406 return -EINVAL;
409 return -EFAULT;
413 rose->defer = opt ? 1 : 0;
418 return -EINVAL;
419 rose->t1 = opt * HZ;
424 return -EINVAL;
425 rose->t2 = opt * HZ;
430 return -EINVAL;
431 rose->t3 = opt * HZ;
436 return -EINVAL;
437 rose->hb = opt * HZ;
442 return -EINVAL;
443 rose->idle = opt * 60 * HZ;
447 rose->qbitincl = opt ? 1 : 0;
451 return -ENOPROTOOPT;
458 struct sock *sk = sock->sk;
464 return -ENOPROTOOPT;
467 return -EFAULT;
470 return -EINVAL;
474 val = rose->defer;
478 val = rose->t1 / HZ;
482 val = rose->t2 / HZ;
486 val = rose->t3 / HZ;
490 val = rose->hb / HZ;
494 val = rose->idle / (60 * HZ);
498 val = rose->qbitincl;
502 return -ENOPROTOOPT;
508 return -EFAULT;
510 return copy_to_user(optval, &val, len) ? -EFAULT : 0;
515 struct sock *sk = sock->sk;
518 if (sock->state != SS_UNCONNECTED) {
520 return -EINVAL;
523 if (sk->sk_state != TCP_LISTEN) {
526 rose->dest_ndigis = 0;
527 memset(&rose->dest_addr, 0, ROSE_ADDR_LEN);
528 memset(&rose->dest_call, 0, AX25_ADDR_LEN);
529 memset(rose->dest_digis, 0, AX25_ADDR_LEN * ROSE_MAX_DIGIS);
530 sk->sk_max_ack_backlog = backlog;
531 sk->sk_state = TCP_LISTEN;
537 return -EOPNOTSUPP;
553 return -EAFNOSUPPORT;
555 if (sock->type != SOCK_SEQPACKET || protocol != 0)
556 return -ESOCKTNOSUPPORT;
560 return -ENOMEM;
566 skb_queue_head_init(&rose->ack_queue);
568 skb_queue_head_init(&rose->frag_queue);
569 rose->fraglen = 0;
572 sock->ops = &rose_proto_ops;
573 sk->sk_protocol = protocol;
575 timer_setup(&rose->timer, NULL, 0);
576 timer_setup(&rose->idletimer, NULL, 0);
578 rose->t1 = msecs_to_jiffies(sysctl_rose_call_request_timeout);
579 rose->t2 = msecs_to_jiffies(sysctl_rose_reset_request_timeout);
580 rose->t3 = msecs_to_jiffies(sysctl_rose_clear_request_timeout);
581 rose->hb = msecs_to_jiffies(sysctl_rose_ack_hold_back_timeout);
582 rose->idle = msecs_to_jiffies(sysctl_rose_no_activity_timeout);
584 rose->state = ROSE_STATE_0;
594 if (osk->sk_type != SOCK_SEQPACKET)
605 skb_queue_head_init(&rose->ack_queue);
607 skb_queue_head_init(&rose->frag_queue);
608 rose->fraglen = 0;
611 sk->sk_type = osk->sk_type;
612 sk->sk_priority = READ_ONCE(osk->sk_priority);
613 sk->sk_protocol = osk->sk_protocol;
614 sk->sk_rcvbuf = osk->sk_rcvbuf;
615 sk->sk_sndbuf = osk->sk_sndbuf;
616 sk->sk_state = TCP_ESTABLISHED;
619 timer_setup(&rose->timer, NULL, 0);
620 timer_setup(&rose->idletimer, NULL, 0);
623 rose->t1 = orose->t1;
624 rose->t2 = orose->t2;
625 rose->t3 = orose->t3;
626 rose->hb = orose->hb;
627 rose->idle = orose->idle;
628 rose->defer = orose->defer;
629 rose->device = orose->device;
630 if (rose->device)
631 netdev_hold(rose->device, &rose->dev_tracker, GFP_ATOMIC);
632 rose->qbitincl = orose->qbitincl;
639 struct sock *sk = sock->sk;
649 switch (rose->state) {
652 rose_disconnect(sk, 0, -1, -1);
658 rose_neigh_put(rose->neighbour);
660 rose_disconnect(sk, 0, -1, -1);
673 rose->state = ROSE_STATE_2;
674 sk->sk_state = TCP_CLOSE;
675 sk->sk_shutdown |= SEND_SHUTDOWN;
676 sk->sk_state_change(sk);
686 netdev_put(rose->device, &rose->dev_tracker);
687 rose->device = NULL;
689 sock->sk = NULL;
698 struct sock *sk = sock->sk;
704 int err = -EINVAL;
708 return -EINVAL;
710 if (addr->srose_family != AF_ROSE)
711 return -EINVAL;
713 if (addr_len == sizeof(struct sockaddr_rose) && addr->srose_ndigis > 1)
714 return -EINVAL;
716 if ((unsigned int) addr->srose_ndigis > ROSE_MAX_DIGIS)
717 return -EINVAL;
724 err = -EADDRNOTAVAIL;
725 dev = rose_dev_get(&addr->srose_addr);
729 source = &addr->srose_call;
733 rose->source_call = user->call;
738 err = -EACCES;
741 rose->source_call = *source;
744 rose->source_addr = addr->srose_addr;
745 rose->device = dev;
746 netdev_tracker_alloc(rose->device, &rose->dev_tracker, GFP_KERNEL);
747 rose->source_ndigis = addr->srose_ndigis;
751 for (n = 0 ; n < addr->srose_ndigis ; n++)
752 rose->source_digis[n] = full_addr->srose_digis[n];
754 if (rose->source_ndigis == 1) {
755 rose->source_digis[0] = addr->srose_digi;
771 struct sock *sk = sock->sk;
779 return -EINVAL;
781 if (addr->srose_family != AF_ROSE)
782 return -EINVAL;
784 if (addr_len == sizeof(struct sockaddr_rose) && addr->srose_ndigis > 1)
785 return -EINVAL;
787 if ((unsigned int) addr->srose_ndigis > ROSE_MAX_DIGIS)
788 return -EINVAL;
791 if ((rose->source_ndigis + addr->srose_ndigis) > ROSE_MAX_DIGIS)
792 return -EINVAL;
796 if (sk->sk_state == TCP_ESTABLISHED && sock->state == SS_CONNECTING) {
798 sock->state = SS_CONNECTED;
802 if (sk->sk_state == TCP_CLOSE && sock->state == SS_CONNECTING) {
803 sock->state = SS_UNCONNECTED;
804 err = -ECONNREFUSED;
808 if (sk->sk_state == TCP_ESTABLISHED) {
810 err = -EISCONN;
814 sk->sk_state = TCP_CLOSE;
815 sock->state = SS_UNCONNECTED;
817 rose->neighbour = rose_get_neigh(&addr->srose_addr, &cause,
819 if (!rose->neighbour) {
820 err = -ENETUNREACH;
824 rose->lci = rose_new_lci(rose->neighbour);
825 if (!rose->lci) {
826 err = -ENETUNREACH;
827 rose_neigh_put(rose->neighbour);
831 if (sock_flag(sk, SOCK_ZAPPED)) { /* Must bind first - autobinding in this may or may not work */
838 err = -ENETUNREACH;
839 rose_neigh_put(rose->neighbour);
845 err = -EINVAL;
846 rose_neigh_put(rose->neighbour);
851 memcpy(&rose->source_addr, dev->dev_addr, ROSE_ADDR_LEN);
852 rose->source_call = user->call;
853 rose->device = dev;
854 netdev_tracker_alloc(rose->device, &rose->dev_tracker,
860 rose->dest_addr = addr->srose_addr;
861 rose->dest_call = addr->srose_call;
862 rose->rand = ((long)rose & 0xFFFF) + rose->lci;
863 rose->dest_ndigis = addr->srose_ndigis;
867 for (n = 0 ; n < addr->srose_ndigis ; n++)
868 rose->dest_digis[n] = full_addr->srose_digis[n];
870 if (rose->dest_ndigis == 1) {
871 rose->dest_digis[0] = addr->srose_digi;
876 sock->state = SS_CONNECTING;
877 sk->sk_state = TCP_SYN_SENT;
879 rose->state = ROSE_STATE_1;
886 if (sk->sk_state != TCP_ESTABLISHED && (flags & O_NONBLOCK)) {
887 err = -EINPROGRESS;
895 if (sk->sk_state == TCP_SYN_SENT) {
901 if (sk->sk_state != TCP_SYN_SENT)
909 err = -ERESTARTSYS;
918 if (sk->sk_state != TCP_ESTABLISHED) {
919 sock->state = SS_UNCONNECTED;
924 sock->state = SS_CONNECTED;
941 if ((sk = sock->sk) == NULL)
942 return -EINVAL;
945 if (sk->sk_type != SOCK_SEQPACKET) {
946 err = -EOPNOTSUPP;
950 if (sk->sk_state != TCP_LISTEN) {
951 err = -EINVAL;
962 skb = skb_dequeue(&sk->sk_receive_queue);
966 if (arg->flags & O_NONBLOCK) {
967 err = -EWOULDBLOCK;
976 err = -ERESTARTSYS;
983 newsk = skb->sk;
987 skb->sk = NULL;
1001 struct sock *sk = sock->sk;
1007 if (sk->sk_state != TCP_ESTABLISHED)
1008 return -ENOTCONN;
1009 srose->srose_family = AF_ROSE;
1010 srose->srose_addr = rose->dest_addr;
1011 srose->srose_call = rose->dest_call;
1012 srose->srose_ndigis = rose->dest_ndigis;
1013 for (n = 0; n < rose->dest_ndigis; n++)
1014 srose->srose_digis[n] = rose->dest_digis[n];
1016 srose->srose_family = AF_ROSE;
1017 srose->srose_addr = rose->source_addr;
1018 srose->srose_call = rose->source_call;
1019 srose->srose_ndigis = rose->source_ndigis;
1020 for (n = 0; n < rose->source_ndigis; n++)
1021 srose->srose_digis[n] = rose->source_digis[n];
1035 skb->sk = NULL; /* Initially we don't know who it's for */
1038 * skb->data points to the rose frame start
1042 if (!rose_parse_facilities(skb->data + ROSE_CALL_REQ_FACILITIES_OFF,
1043 skb->len - ROSE_CALL_REQ_FACILITIES_OFF,
1060 skb->sk = make;
1061 make->sk_state = TCP_ESTABLISHED;
1064 make_rose->lci = lci;
1065 make_rose->dest_addr = facilities.dest_addr;
1066 make_rose->dest_call = facilities.dest_call;
1067 make_rose->dest_ndigis = facilities.dest_ndigis;
1069 make_rose->dest_digis[n] = facilities.dest_digis[n];
1070 make_rose->source_addr = facilities.source_addr;
1071 make_rose->source_call = facilities.source_call;
1072 make_rose->source_ndigis = facilities.source_ndigis;
1074 make_rose->source_digis[n] = facilities.source_digis[n];
1075 make_rose->neighbour = neigh;
1076 make_rose->device = dev;
1078 netdev_tracker_alloc(make_rose->device, &make_rose->dev_tracker,
1080 make_rose->facilities = facilities;
1082 rose_neigh_hold(make_rose->neighbour);
1084 if (rose_sk(sk)->defer) {
1085 make_rose->state = ROSE_STATE_5;
1088 make_rose->state = ROSE_STATE_3;
1092 make_rose->condition = 0x00;
1093 make_rose->vs = 0;
1094 make_rose->va = 0;
1095 make_rose->vr = 0;
1096 make_rose->vl = 0;
1101 skb_queue_head(&sk->sk_receive_queue, skb);
1106 sk->sk_data_ready(sk);
1113 struct sock *sk = sock->sk;
1115 DECLARE_SOCKADDR(struct sockaddr_rose *, usrose, msg->msg_name);
1122 if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_EOR|MSG_CMSG_COMPAT))
1123 return -EINVAL;
1126 return -EADDRNOTAVAIL;
1128 if (sk->sk_shutdown & SEND_SHUTDOWN) {
1130 return -EPIPE;
1133 if (rose->neighbour == NULL || rose->device == NULL)
1134 return -ENETUNREACH;
1137 if (msg->msg_namelen != sizeof(struct sockaddr_rose) && msg->msg_namelen != sizeof(struct full_sockaddr_rose))
1138 return -EINVAL;
1140 memcpy(&srose, usrose, msg->msg_namelen);
1141 if (rosecmp(&rose->dest_addr, &srose.srose_addr) != 0 ||
1142 ax25cmp(&rose->dest_call, &srose.srose_call) != 0)
1143 return -EISCONN;
1144 if (srose.srose_ndigis != rose->dest_ndigis)
1145 return -EISCONN;
1146 if (srose.srose_ndigis == rose->dest_ndigis) {
1148 if (ax25cmp(&rose->dest_digis[n],
1150 return -EISCONN;
1153 return -EINVAL;
1155 if (sk->sk_state != TCP_ESTABLISHED)
1156 return -ENOTCONN;
1159 srose.srose_addr = rose->dest_addr;
1160 srose.srose_call = rose->dest_call;
1161 srose.srose_ndigis = rose->dest_ndigis;
1162 for (n = 0 ; n < rose->dest_ndigis ; n++)
1163 srose.srose_digis[n] = rose->dest_digis[n];
1169 return -EMSGSIZE;
1173 if ((skb = sock_alloc_send_skb(sk, size, msg->msg_flags & MSG_DONTWAIT, &err)) == NULL)
1195 if (rose->qbitincl) {
1196 qbit = skb->data[0];
1206 asmptr[0] = ((rose->lci >> 8) & 0x0F) | ROSE_GFI;
1207 asmptr[1] = (rose->lci >> 0) & 0xFF;
1213 if (sk->sk_state != TCP_ESTABLISHED) {
1215 return -ENOTCONN;
1219 #define ROSE_PACLEN (256-ROSE_MIN_LEN)
1220 if (skb->len - ROSE_MIN_LEN > ROSE_PACLEN) {
1232 while (skb->len > 0) {
1238 skbn->sk = sk;
1239 skbn->free = 1;
1240 skbn->arp = 1;
1244 lg = (ROSE_PACLEN > skb->len) ? skb->len : ROSE_PACLEN;
1254 if (skb->len > 0)
1255 skbn->data[2] |= M_BIT;
1257 skb_queue_tail(&sk->sk_write_queue, skbn); /* Throw it on the queue */
1260 skb->free = 1;
1263 skb_queue_tail(&sk->sk_write_queue, skb); /* Throw it on the queue */
1266 skb_queue_tail(&sk->sk_write_queue, skb); /* Shove it onto the queue */
1278 struct sock *sk = sock->sk;
1289 if (sk->sk_state != TCP_ESTABLISHED)
1290 return -ENOTCONN;
1297 qbit = (skb->data[0] & ROSE_Q_BIT) == ROSE_Q_BIT;
1301 if (rose->qbitincl) {
1307 copied = skb->len;
1311 msg->msg_flags |= MSG_TRUNC;
1316 if (msg->msg_name) {
1319 msg->msg_name);
1321 memset(msg->msg_name, 0, sizeof(struct full_sockaddr_rose));
1322 srose = msg->msg_name;
1323 srose->srose_family = AF_ROSE;
1324 srose->srose_addr = rose->dest_addr;
1325 srose->srose_call = rose->dest_call;
1326 srose->srose_ndigis = rose->dest_ndigis;
1327 for (n = 0 ; n < rose->dest_ndigis ; n++)
1328 full_srose->srose_digis[n] = rose->dest_digis[n];
1329 msg->msg_namelen = sizeof(struct full_sockaddr_rose);
1340 struct sock *sk = sock->sk;
1348 amount = sk->sk_sndbuf - sk_wmem_alloc_get(sk);
1358 spin_lock_irq(&sk->sk_receive_queue.lock);
1359 if ((skb = skb_peek(&sk->sk_receive_queue)) != NULL)
1360 amount = skb->len;
1361 spin_unlock_irq(&sk->sk_receive_queue.lock);
1375 return -EINVAL;
1381 return -EPERM;
1386 rose_cause.cause = rose->cause;
1387 rose_cause.diagnostic = rose->diagnostic;
1388 return copy_to_user(argp, &rose_cause, sizeof(struct rose_cause_struct)) ? -EFAULT : 0;
1394 return -EFAULT;
1395 rose->cause = rose_cause.cause;
1396 rose->diagnostic = rose_cause.diagnostic;
1401 if (!capable(CAP_NET_ADMIN)) return -EPERM;
1405 return -EFAULT;
1412 return copy_to_user(argp, &rose_callsign, sizeof(ax25_address)) ? -EFAULT : 0;
1415 if (rose->state == ROSE_STATE_5) {
1418 rose->condition = 0x00;
1419 rose->vs = 0;
1420 rose->va = 0;
1421 rose->vr = 0;
1422 rose->vl = 0;
1423 rose->state = ROSE_STATE_3;
1428 return -ENOIOCTLCMD;
1459 "dest_addr dest_call src_addr src_call dev lci neigh st vs vr va t t1 t2 t3 hb idle Snd-Q Rcv-Q inode\n");
1465 const struct net_device *dev = rose->device;
1470 devname = dev->name;
1472 seq_printf(seq, "%-10s %-9s ",
1473 rose2asc(rsbuf, &rose->dest_addr),
1474 ax2asc(buf, &rose->dest_call));
1476 if (ax25cmp(&rose->source_call, &null_ax25_address) == 0)
1477 callsign = "??????-?";
1479 callsign = ax2asc(buf, &rose->source_call);
1482 "%-10s %-9s %-5s %3.3X %05d %d %d %d %d %3lu %3lu %3lu %3lu %3lu %3lu/%03lu %5d %5d %ld\n",
1483 rose2asc(rsbuf, &rose->source_addr),
1486 rose->lci & 0x0FFF,
1487 (rose->neighbour) ? rose->neighbour->number : 0,
1488 rose->state,
1489 rose->vs,
1490 rose->vr,
1491 rose->va,
1492 ax25_display_timer(&rose->timer) / HZ,
1493 rose->t1 / HZ,
1494 rose->t2 / HZ,
1495 rose->t3 / HZ,
1496 rose->hb / HZ,
1497 ax25_display_timer(&rose->idletimer) / (60 * HZ),
1498 rose->idle / (60 * HZ),
1501 s->sk_socket ? SOCK_INODE(s->sk_socket)->i_ino : 0L);
1563 printk(KERN_ERR "ROSE: rose_proto_init - rose_ndevs parameter too large\n");
1564 rc = -EINVAL;
1577 printk(KERN_ERR "ROSE: rose_proto_init - unable to allocate device structure\n");
1578 rc = -ENOMEM;
1589 printk(KERN_ERR "ROSE: rose_proto_init - unable to allocate memory\n");
1590 rc = -ENOMEM;
1626 while (--i >= 0) {