Lines Matching refs:rose_route

45 static struct rose_route *rose_route_list;
54 static int __must_check rose_add_node(struct rose_route_struct *rose_route, in rose_add_node() argument
66 if ((rose_node->mask == rose_route->mask) && in rose_add_node()
67 (rosecmpm(&rose_route->address, &rose_node->address, in rose_add_node()
68 rose_route->mask) == 0)) in rose_add_node()
80 if (ax25cmp(&rose_route->neighbour, in rose_add_node()
94 rose_neigh->callsign = rose_route->neighbour; in rose_add_node()
110 if (rose_route->ndigis != 0) { in rose_add_node()
119 rose_neigh->digipeat->ndigi = rose_route->ndigis; in rose_add_node()
122 for (i = 0; i < rose_route->ndigis; i++) { in rose_add_node()
124 rose_route->digipeaters[i]; in rose_add_node()
145 if (rose_tmpn->mask > rose_route->mask) { in rose_add_node()
160 rose_node->address = rose_route->address; in rose_add_node()
161 rose_node->mask = rose_route->mask; in rose_add_node()
264 static void rose_remove_route(struct rose_route *rose_route) in rose_remove_route() argument
266 struct rose_route *s; in rose_remove_route()
268 if (rose_route->neigh1 != NULL) in rose_remove_route()
269 rose_route->neigh1->use--; in rose_remove_route()
271 if (rose_route->neigh2 != NULL) in rose_remove_route()
272 rose_route->neigh2->use--; in rose_remove_route()
274 if ((s = rose_route_list) == rose_route) { in rose_remove_route()
275 rose_route_list = rose_route->next; in rose_remove_route()
276 kfree(rose_route); in rose_remove_route()
281 if (s->next == rose_route) { in rose_remove_route()
282 s->next = rose_route->next; in rose_remove_route()
283 kfree(rose_route); in rose_remove_route()
295 static int rose_del_node(struct rose_route_struct *rose_route, in rose_del_node() argument
307 if ((rose_node->mask == rose_route->mask) && in rose_del_node()
308 (rosecmpm(&rose_route->address, &rose_node->address, in rose_del_node()
309 rose_route->mask) == 0)) in rose_del_node()
321 if (ax25cmp(&rose_route->neighbour, in rose_del_node()
533 struct rose_route *s, *rose_route;
536 rose_route = rose_route_list;
537 while (rose_route != NULL) {
538 s = rose_route;
539 rose_route = rose_route->next;
660 struct rose_route *rose_route_free_lci(unsigned int lci, struct rose_neigh *neigh) in rose_route_free_lci()
662 struct rose_route *rose_route; in rose_route_free_lci() local
664 for (rose_route = rose_route_list; rose_route != NULL; rose_route = rose_route->next) in rose_route_free_lci()
665 if ((rose_route->neigh1 == neigh && rose_route->lci1 == lci) || in rose_route_free_lci()
666 (rose_route->neigh2 == neigh && rose_route->lci2 == lci)) in rose_route_free_lci()
667 return rose_route; in rose_route_free_lci()
727 struct rose_route_struct rose_route; in rose_rt_ioctl() local
733 if (copy_from_user(&rose_route, arg, sizeof(struct rose_route_struct))) in rose_rt_ioctl()
735 if ((dev = rose_ax25_dev_find(rose_route.device)) == NULL) in rose_rt_ioctl()
737 if (rose_dev_exists(&rose_route.address)) /* Can't add routes to ourself */ in rose_rt_ioctl()
739 if (rose_route.mask > 10) /* Mask can't be more than 10 digits */ in rose_rt_ioctl()
741 if (rose_route.ndigis > AX25_MAX_DIGIS) in rose_rt_ioctl()
743 err = rose_add_node(&rose_route, dev); in rose_rt_ioctl()
747 if (copy_from_user(&rose_route, arg, sizeof(struct rose_route_struct))) in rose_rt_ioctl()
749 if ((dev = rose_ax25_dev_find(rose_route.device)) == NULL) in rose_rt_ioctl()
751 err = rose_del_node(&rose_route, dev); in rose_rt_ioctl()
766 struct rose_route *rose_route, *s; in rose_del_route_by_neigh() local
777 rose_route = rose_route_list; in rose_del_route_by_neigh()
779 while (rose_route != NULL) { in rose_del_route_by_neigh()
780 if ((rose_route->neigh1 == rose_neigh && rose_route->neigh2 == rose_neigh) || in rose_del_route_by_neigh()
781 (rose_route->neigh1 == rose_neigh && rose_route->neigh2 == NULL) || in rose_del_route_by_neigh()
782 (rose_route->neigh2 == rose_neigh && rose_route->neigh1 == NULL)) { in rose_del_route_by_neigh()
783 s = rose_route->next; in rose_del_route_by_neigh()
784 rose_remove_route(rose_route); in rose_del_route_by_neigh()
785 rose_route = s; in rose_del_route_by_neigh()
789 if (rose_route->neigh1 == rose_neigh) { in rose_del_route_by_neigh()
790 rose_route->neigh1->use--; in rose_del_route_by_neigh()
791 rose_route->neigh1 = NULL; in rose_del_route_by_neigh()
792 rose_transmit_clear_request(rose_route->neigh2, rose_route->lci2, ROSE_OUT_OF_ORDER, 0); in rose_del_route_by_neigh()
795 if (rose_route->neigh2 == rose_neigh) { in rose_del_route_by_neigh()
796 rose_route->neigh2->use--; in rose_del_route_by_neigh()
797 rose_route->neigh2 = NULL; in rose_del_route_by_neigh()
798 rose_transmit_clear_request(rose_route->neigh1, rose_route->lci1, ROSE_OUT_OF_ORDER, 0); in rose_del_route_by_neigh()
801 rose_route = rose_route->next; in rose_del_route_by_neigh()
855 struct rose_route *rose_route; in rose_route_frame() local
957 rose_route = rose_route_list; in rose_route_frame()
958 while (rose_route != NULL) { in rose_route_frame()
959 if (rose_route->lci1 == lci && in rose_route_frame()
960 rose_route->neigh1 == rose_neigh) { in rose_route_frame()
963 rose_remove_route(rose_route); in rose_route_frame()
965 } else if (rose_route->neigh2 != NULL) { in rose_route_frame()
967 skb->data[0] |= (rose_route->lci2 >> 8) & 0x0F; in rose_route_frame()
968 skb->data[1] = (rose_route->lci2 >> 0) & 0xFF; in rose_route_frame()
969 rose_transmit_link(skb, rose_route->neigh2); in rose_route_frame()
971 rose_remove_route(rose_route); in rose_route_frame()
976 rose_remove_route(rose_route); in rose_route_frame()
980 if (rose_route->lci2 == lci && in rose_route_frame()
981 rose_route->neigh2 == rose_neigh) { in rose_route_frame()
984 rose_remove_route(rose_route); in rose_route_frame()
986 } else if (rose_route->neigh1 != NULL) { in rose_route_frame()
988 skb->data[0] |= (rose_route->lci1 >> 8) & 0x0F; in rose_route_frame()
989 skb->data[1] = (rose_route->lci1 >> 0) & 0xFF; in rose_route_frame()
990 rose_transmit_link(skb, rose_route->neigh1); in rose_route_frame()
992 rose_remove_route(rose_route); in rose_route_frame()
997 rose_remove_route(rose_route); in rose_route_frame()
1001 rose_route = rose_route->next; in rose_route_frame()
1026 rose_route = rose_route_list; in rose_route_frame()
1027 while (rose_route != NULL) { in rose_route_frame()
1028 if (rose_route->rand == facilities.rand && in rose_route_frame()
1029 rosecmp(src_addr, &rose_route->src_addr) == 0 && in rose_route_frame()
1030 ax25cmp(&facilities.dest_call, &rose_route->src_call) == 0 && in rose_route_frame()
1031 ax25cmp(&facilities.source_call, &rose_route->dest_call) == 0) { in rose_route_frame()
1035 rose_route = rose_route->next; in rose_route_frame()
1048 if ((rose_route = kmalloc(sizeof(*rose_route), GFP_ATOMIC)) == NULL) { in rose_route_frame()
1053 rose_route->lci1 = lci; in rose_route_frame()
1054 rose_route->src_addr = *src_addr; in rose_route_frame()
1055 rose_route->dest_addr = *dest_addr; in rose_route_frame()
1056 rose_route->src_call = facilities.dest_call; in rose_route_frame()
1057 rose_route->dest_call = facilities.source_call; in rose_route_frame()
1058 rose_route->rand = facilities.rand; in rose_route_frame()
1059 rose_route->neigh1 = rose_neigh; in rose_route_frame()
1060 rose_route->lci2 = new_lci; in rose_route_frame()
1061 rose_route->neigh2 = new_neigh; in rose_route_frame()
1063 rose_route->neigh1->use++; in rose_route_frame()
1064 rose_route->neigh2->use++; in rose_route_frame()
1066 rose_route->next = rose_route_list; in rose_route_frame()
1067 rose_route_list = rose_route; in rose_route_frame()
1070 skb->data[0] |= (rose_route->lci2 >> 8) & 0x0F; in rose_route_frame()
1071 skb->data[1] = (rose_route->lci2 >> 0) & 0xFF; in rose_route_frame()
1073 rose_transmit_link(skb, rose_route->neigh2); in rose_route_frame()
1252 struct rose_route *rose_route; in rose_route_start() local
1259 for (rose_route = rose_route_list; rose_route && i < *pos; in rose_route_start()
1260 rose_route = rose_route->next, ++i); in rose_route_start()
1262 return (i == *pos) ? rose_route : NULL; in rose_route_start()
1270 : ((struct rose_route *)v)->next; in rose_route_next()
1287 struct rose_route *rose_route = v; in rose_route_show() local
1289 if (rose_route->neigh1) in rose_route_show()
1292 rose_route->lci1, in rose_route_show()
1293 rose2asc(rsbuf, &rose_route->src_addr), in rose_route_show()
1294 ax2asc(buf, &rose_route->src_call), in rose_route_show()
1295 rose_route->neigh1->number); in rose_route_show()
1300 if (rose_route->neigh2) in rose_route_show()
1303 rose_route->lci2, in rose_route_show()
1304 rose2asc(rsbuf, &rose_route->dest_addr), in rose_route_show()
1305 ax2asc(buf, &rose_route->dest_call), in rose_route_show()
1306 rose_route->neigh2->number); in rose_route_show()
1343 struct rose_route *u, *rose_route = rose_route_list; in rose_rt_free() local
1359 while (rose_route != NULL) { in rose_rt_free()
1360 u = rose_route; in rose_rt_free()
1361 rose_route = rose_route->next; in rose_rt_free()