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,
534 struct rose_route *s, *rose_route;
537 rose_route = rose_route_list;
538 while (rose_route != NULL) {
539 s = rose_route;
540 rose_route = rose_route->next;
665 struct rose_route *rose_route_free_lci(unsigned int lci, struct rose_neigh *neigh)
667 struct rose_route *rose_route;
669 for (rose_route = rose_route_list; rose_route != NULL; rose_route = rose_route->next)
670 if ((rose_route->neigh1 == neigh && rose_route->lci1 == lci) ||
671 (rose_route->neigh2 == neigh && rose_route->lci2 == lci))
672 return rose_route;
731 struct rose_route_struct rose_route;
737 if (copy_from_user(&rose_route, arg, sizeof(struct rose_route_struct)))
739 if ((dev = rose_ax25_dev_find(rose_route.device)) == NULL)
741 if (rose_dev_exists(&rose_route.address)) /* Can't add routes to ourself */
743 if (rose_route.mask > 10) /* Mask can't be more than 10 digits */
745 if (rose_route.ndigis > AX25_MAX_DIGIS)
747 err = rose_add_node(&rose_route, dev);
751 if (copy_from_user(&rose_route, arg, sizeof(struct rose_route_struct)))
753 if ((dev = rose_ax25_dev_find(rose_route.device)) == NULL)
755 err = rose_del_node(&rose_route, dev);
770 struct rose_route *rose_route, *s;
781 rose_route = rose_route_list;
783 while (rose_route != NULL) {
784 if ((rose_route->neigh1 == rose_neigh && rose_route->neigh2 == rose_neigh) ||
785 (rose_route->neigh1 == rose_neigh && rose_route->neigh2 == NULL) ||
786 (rose_route->neigh2 == rose_neigh && rose_route->neigh1 == NULL)) {
787 s = rose_route->next;
788 rose_remove_route(rose_route);
789 rose_route = s;
793 if (rose_route->neigh1 == rose_neigh) {
794 rose_route->neigh1->use--;
795 rose_route->neigh1 = NULL;
796 rose_transmit_clear_request(rose_route->neigh2, rose_route->lci2, ROSE_OUT_OF_ORDER, 0);
799 if (rose_route->neigh2 == rose_neigh) {
800 rose_route->neigh2->use--;
801 rose_route->neigh2 = NULL;
802 rose_transmit_clear_request(rose_route->neigh1, rose_route->lci1, ROSE_OUT_OF_ORDER, 0);
805 rose_route = rose_route->next;
860 struct rose_route *rose_route;
899 printk("rose_route : unknown neighbour or device %s\n",
966 rose_route = rose_route_list;
967 while (rose_route != NULL) {
968 if (rose_route->lci1 == lci &&
969 rose_route->neigh1 == rose_neigh) {
972 rose_remove_route(rose_route);
974 } else if (rose_route->neigh2 != NULL) {
976 skb->data[0] |= (rose_route->lci2 >> 8) & 0x0F;
977 skb->data[1] = (rose_route->lci2 >> 0) & 0xFF;
978 rose_transmit_link(skb, rose_route->neigh2);
980 rose_remove_route(rose_route);
985 rose_remove_route(rose_route);
989 if (rose_route->lci2 == lci &&
990 rose_route->neigh2 == rose_neigh) {
993 rose_remove_route(rose_route);
995 } else if (rose_route->neigh1 != NULL) {
997 skb->data[0] |= (rose_route->lci1 >> 8) & 0x0F;
998 skb->data[1] = (rose_route->lci1 >> 0) & 0xFF;
999 rose_transmit_link(skb, rose_route->neigh1);
1001 rose_remove_route(rose_route);
1006 rose_remove_route(rose_route);
1010 rose_route = rose_route->next;
1035 rose_route = rose_route_list;
1036 while (rose_route != NULL) {
1037 if (rose_route->rand == facilities.rand &&
1038 rosecmp(src_addr, &rose_route->src_addr) == 0 &&
1039 ax25cmp(&facilities.dest_call, &rose_route->src_call) == 0 &&
1040 ax25cmp(&facilities.source_call, &rose_route->dest_call) == 0) {
1044 rose_route = rose_route->next;
1057 if ((rose_route = kmalloc(sizeof(*rose_route), GFP_ATOMIC)) == NULL) {
1062 rose_route->lci1 = lci;
1063 rose_route->src_addr = *src_addr;
1064 rose_route->dest_addr = *dest_addr;
1065 rose_route->src_call = facilities.dest_call;
1066 rose_route->dest_call = facilities.source_call;
1067 rose_route->rand = facilities.rand;
1068 rose_route->neigh1 = rose_neigh;
1069 rose_route->lci2 = new_lci;
1070 rose_route->neigh2 = new_neigh;
1072 rose_route->neigh1->use++;
1073 rose_route->neigh2->use++;
1075 rose_route->next = rose_route_list;
1076 rose_route_list = rose_route;
1079 skb->data[0] |= (rose_route->lci2 >> 8) & 0x0F;
1080 skb->data[1] = (rose_route->lci2 >> 0) & 0xFF;
1082 rose_transmit_link(skb, rose_route->neigh2);
1227 struct rose_route *rose_route;
1234 for (rose_route = rose_route_list; rose_route && i < *pos;
1235 rose_route = rose_route->next, ++i);
1237 return (i == *pos) ? rose_route : NULL;
1245 : ((struct rose_route *)v)->next;
1262 struct rose_route *rose_route = v;
1264 if (rose_route->neigh1)
1267 rose_route->lci1,
1268 rose2asc(rsbuf, &rose_route->src_addr),
1269 ax2asc(buf, &rose_route->src_call),
1270 rose_route->neigh1->number);
1275 if (rose_route->neigh2)
1278 rose_route->lci2,
1279 rose2asc(rsbuf, &rose_route->dest_addr),
1280 ax2asc(buf, &rose_route->dest_call),
1281 rose_route->neigh2->number);
1304 struct rose_route *u, *rose_route = rose_route_list;
1320 while (rose_route != NULL) {
1321 u = rose_route;
1322 rose_route = rose_route->next;