Lines Matching defs:rose_route

42 static struct rose_route *rose_route_list;
51 static int __must_check rose_add_node(struct rose_route_struct *rose_route,
63 if ((rose_node->mask == rose_route->mask) &&
64 (rosecmpm(&rose_route->address, &rose_node->address,
65 rose_route->mask) == 0))
77 if (ax25cmp(&rose_route->neighbour,
91 rose_neigh->callsign = rose_route->neighbour;
107 if (rose_route->ndigis != 0) {
116 rose_neigh->digipeat->ndigi = rose_route->ndigis;
119 for (i = 0; i < rose_route->ndigis; i++) {
121 rose_route->digipeaters[i];
142 if (rose_tmpn->mask > rose_route->mask) {
157 rose_node->address = rose_route->address;
158 rose_node->mask = rose_route->mask;
261 static void rose_remove_route(struct rose_route *rose_route)
263 struct rose_route *s;
265 if (rose_route->neigh1 != NULL)
266 rose_route->neigh1->use--;
268 if (rose_route->neigh2 != NULL)
269 rose_route->neigh2->use--;
271 if ((s = rose_route_list) == rose_route) {
272 rose_route_list = rose_route->next;
273 kfree(rose_route);
278 if (s->next == rose_route) {
279 s->next = rose_route->next;
280 kfree(rose_route);
292 static int rose_del_node(struct rose_route_struct *rose_route,
304 if ((rose_node->mask == rose_route->mask) &&
305 (rosecmpm(&rose_route->address, &rose_node->address,
306 rose_route->mask) == 0))
318 if (ax25cmp(&rose_route->neighbour,
532 struct rose_route *s, *rose_route;
535 rose_route = rose_route_list;
536 while (rose_route != NULL) {
537 s = rose_route;
538 rose_route = rose_route->next;
661 struct rose_route *rose_route_free_lci(unsigned int lci, struct rose_neigh *neigh)
663 struct rose_route *rose_route;
665 for (rose_route = rose_route_list; rose_route != NULL; rose_route = rose_route->next)
666 if ((rose_route->neigh1 == neigh && rose_route->lci1 == lci) ||
667 (rose_route->neigh2 == neigh && rose_route->lci2 == lci))
668 return rose_route;
727 struct rose_route_struct rose_route;
733 if (copy_from_user(&rose_route, arg, sizeof(struct rose_route_struct)))
735 if ((dev = rose_ax25_dev_find(rose_route.device)) == NULL)
737 if (rose_dev_exists(&rose_route.address)) /* Can't add routes to ourself */
739 if (rose_route.mask > 10) /* Mask can't be more than 10 digits */
741 if (rose_route.ndigis > AX25_MAX_DIGIS)
743 err = rose_add_node(&rose_route, dev);
747 if (copy_from_user(&rose_route, arg, sizeof(struct rose_route_struct)))
749 if ((dev = rose_ax25_dev_find(rose_route.device)) == NULL)
751 err = rose_del_node(&rose_route, dev);
766 struct rose_route *rose_route, *s;
777 rose_route = rose_route_list;
779 while (rose_route != NULL) {
780 if ((rose_route->neigh1 == rose_neigh && rose_route->neigh2 == rose_neigh) ||
781 (rose_route->neigh1 == rose_neigh && rose_route->neigh2 == NULL) ||
782 (rose_route->neigh2 == rose_neigh && rose_route->neigh1 == NULL)) {
783 s = rose_route->next;
784 rose_remove_route(rose_route);
785 rose_route = s;
789 if (rose_route->neigh1 == rose_neigh) {
790 rose_route->neigh1->use--;
791 rose_route->neigh1 = NULL;
792 rose_transmit_clear_request(rose_route->neigh2, rose_route->lci2, ROSE_OUT_OF_ORDER, 0);
795 if (rose_route->neigh2 == rose_neigh) {
796 rose_route->neigh2->use--;
797 rose_route->neigh2 = NULL;
798 rose_transmit_clear_request(rose_route->neigh1, rose_route->lci1, ROSE_OUT_OF_ORDER, 0);
801 rose_route = rose_route->next;
856 struct rose_route *rose_route;
895 printk("rose_route : unknown neighbour or device %s\n",
962 rose_route = rose_route_list;
963 while (rose_route != NULL) {
964 if (rose_route->lci1 == lci &&
965 rose_route->neigh1 == rose_neigh) {
968 rose_remove_route(rose_route);
970 } else if (rose_route->neigh2 != NULL) {
972 skb->data[0] |= (rose_route->lci2 >> 8) & 0x0F;
973 skb->data[1] = (rose_route->lci2 >> 0) & 0xFF;
974 rose_transmit_link(skb, rose_route->neigh2);
976 rose_remove_route(rose_route);
981 rose_remove_route(rose_route);
985 if (rose_route->lci2 == lci &&
986 rose_route->neigh2 == rose_neigh) {
989 rose_remove_route(rose_route);
991 } else if (rose_route->neigh1 != NULL) {
993 skb->data[0] |= (rose_route->lci1 >> 8) & 0x0F;
994 skb->data[1] = (rose_route->lci1 >> 0) & 0xFF;
995 rose_transmit_link(skb, rose_route->neigh1);
997 rose_remove_route(rose_route);
1002 rose_remove_route(rose_route);
1006 rose_route = rose_route->next;
1031 rose_route = rose_route_list;
1032 while (rose_route != NULL) {
1033 if (rose_route->rand == facilities.rand &&
1034 rosecmp(src_addr, &rose_route->src_addr) == 0 &&
1035 ax25cmp(&facilities.dest_call, &rose_route->src_call) == 0 &&
1036 ax25cmp(&facilities.source_call, &rose_route->dest_call) == 0) {
1040 rose_route = rose_route->next;
1053 if ((rose_route = kmalloc(sizeof(*rose_route), GFP_ATOMIC)) == NULL) {
1058 rose_route->lci1 = lci;
1059 rose_route->src_addr = *src_addr;
1060 rose_route->dest_addr = *dest_addr;
1061 rose_route->src_call = facilities.dest_call;
1062 rose_route->dest_call = facilities.source_call;
1063 rose_route->rand = facilities.rand;
1064 rose_route->neigh1 = rose_neigh;
1065 rose_route->lci2 = new_lci;
1066 rose_route->neigh2 = new_neigh;
1068 rose_route->neigh1->use++;
1069 rose_route->neigh2->use++;
1071 rose_route->next = rose_route_list;
1072 rose_route_list = rose_route;
1075 skb->data[0] |= (rose_route->lci2 >> 8) & 0x0F;
1076 skb->data[1] = (rose_route->lci2 >> 0) & 0xFF;
1078 rose_transmit_link(skb, rose_route->neigh2);
1230 struct rose_route *rose_route;
1237 for (rose_route = rose_route_list; rose_route && i < *pos;
1238 rose_route = rose_route->next, ++i);
1240 return (i == *pos) ? rose_route : NULL;
1248 : ((struct rose_route *)v)->next;
1265 struct rose_route *rose_route = v;
1267 if (rose_route->neigh1)
1270 rose_route->lci1,
1271 rose2asc(rsbuf, &rose_route->src_addr),
1272 ax2asc(buf, &rose_route->src_call),
1273 rose_route->neigh1->number);
1278 if (rose_route->neigh2)
1281 rose_route->lci2,
1282 rose2asc(rsbuf, &rose_route->dest_addr),
1283 ax2asc(buf, &rose_route->dest_call),
1284 rose_route->neigh2->number);
1307 struct rose_route *u, *rose_route = rose_route_list;
1323 while (rose_route != NULL) {
1324 u = rose_route;
1325 rose_route = rose_route->next;