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,
527 struct rose_route *s, *rose_route;
530 rose_route = rose_route_list;
531 while (rose_route != NULL) {
532 s = rose_route;
533 rose_route = rose_route->next;
658 struct rose_route *rose_route_free_lci(unsigned int lci, struct rose_neigh *neigh)
660 struct rose_route *rose_route;
662 for (rose_route = rose_route_list; rose_route != NULL; rose_route = rose_route->next)
663 if ((rose_route->neigh1 == neigh && rose_route->lci1 == lci) ||
664 (rose_route->neigh2 == neigh && rose_route->lci2 == lci))
665 return rose_route;
724 struct rose_route_struct rose_route;
730 if (copy_from_user(&rose_route, arg, sizeof(struct rose_route_struct)))
732 if ((dev = rose_ax25_dev_find(rose_route.device)) == NULL)
734 if (rose_dev_exists(&rose_route.address)) /* Can't add routes to ourself */
736 if (rose_route.mask > 10) /* Mask can't be more than 10 digits */
738 if (rose_route.ndigis > AX25_MAX_DIGIS)
740 err = rose_add_node(&rose_route, dev);
744 if (copy_from_user(&rose_route, arg, sizeof(struct rose_route_struct)))
746 if ((dev = rose_ax25_dev_find(rose_route.device)) == NULL)
748 err = rose_del_node(&rose_route, dev);
763 struct rose_route *rose_route, *s;
774 rose_route = rose_route_list;
776 while (rose_route != NULL) {
777 if ((rose_route->neigh1 == rose_neigh && rose_route->neigh2 == rose_neigh) ||
778 (rose_route->neigh1 == rose_neigh && rose_route->neigh2 == NULL) ||
779 (rose_route->neigh2 == rose_neigh && rose_route->neigh1 == NULL)) {
780 s = rose_route->next;
781 rose_remove_route(rose_route);
782 rose_route = s;
786 if (rose_route->neigh1 == rose_neigh) {
787 rose_route->neigh1->use--;
788 rose_route->neigh1 = NULL;
789 rose_transmit_clear_request(rose_route->neigh2, rose_route->lci2, ROSE_OUT_OF_ORDER, 0);
792 if (rose_route->neigh2 == rose_neigh) {
793 rose_route->neigh2->use--;
794 rose_route->neigh2 = NULL;
795 rose_transmit_clear_request(rose_route->neigh1, rose_route->lci1, ROSE_OUT_OF_ORDER, 0);
798 rose_route = rose_route->next;
853 struct rose_route *rose_route;
892 printk("rose_route : unknown neighbour or device %s\n",
959 rose_route = rose_route_list;
960 while (rose_route != NULL) {
961 if (rose_route->lci1 == lci &&
962 rose_route->neigh1 == rose_neigh) {
965 rose_remove_route(rose_route);
967 } else if (rose_route->neigh2 != NULL) {
969 skb->data[0] |= (rose_route->lci2 >> 8) & 0x0F;
970 skb->data[1] = (rose_route->lci2 >> 0) & 0xFF;
971 rose_transmit_link(skb, rose_route->neigh2);
973 rose_remove_route(rose_route);
978 rose_remove_route(rose_route);
982 if (rose_route->lci2 == lci &&
983 rose_route->neigh2 == rose_neigh) {
986 rose_remove_route(rose_route);
988 } else if (rose_route->neigh1 != NULL) {
990 skb->data[0] |= (rose_route->lci1 >> 8) & 0x0F;
991 skb->data[1] = (rose_route->lci1 >> 0) & 0xFF;
992 rose_transmit_link(skb, rose_route->neigh1);
994 rose_remove_route(rose_route);
999 rose_remove_route(rose_route);
1003 rose_route = rose_route->next;
1028 rose_route = rose_route_list;
1029 while (rose_route != NULL) {
1030 if (rose_route->rand == facilities.rand &&
1031 rosecmp(src_addr, &rose_route->src_addr) == 0 &&
1032 ax25cmp(&facilities.dest_call, &rose_route->src_call) == 0 &&
1033 ax25cmp(&facilities.source_call, &rose_route->dest_call) == 0) {
1037 rose_route = rose_route->next;
1050 if ((rose_route = kmalloc(sizeof(*rose_route), GFP_ATOMIC)) == NULL) {
1055 rose_route->lci1 = lci;
1056 rose_route->src_addr = *src_addr;
1057 rose_route->dest_addr = *dest_addr;
1058 rose_route->src_call = facilities.dest_call;
1059 rose_route->dest_call = facilities.source_call;
1060 rose_route->rand = facilities.rand;
1061 rose_route->neigh1 = rose_neigh;
1062 rose_route->lci2 = new_lci;
1063 rose_route->neigh2 = new_neigh;
1065 rose_route->neigh1->use++;
1066 rose_route->neigh2->use++;
1068 rose_route->next = rose_route_list;
1069 rose_route_list = rose_route;
1072 skb->data[0] |= (rose_route->lci2 >> 8) & 0x0F;
1073 skb->data[1] = (rose_route->lci2 >> 0) & 0xFF;
1075 rose_transmit_link(skb, rose_route->neigh2);
1220 struct rose_route *rose_route;
1227 for (rose_route = rose_route_list; rose_route && i < *pos;
1228 rose_route = rose_route->next, ++i);
1230 return (i == *pos) ? rose_route : NULL;
1238 : ((struct rose_route *)v)->next;
1255 struct rose_route *rose_route = v;
1257 if (rose_route->neigh1)
1260 rose_route->lci1,
1261 rose2asc(rsbuf, &rose_route->src_addr),
1262 ax2asc(buf, &rose_route->src_call),
1263 rose_route->neigh1->number);
1268 if (rose_route->neigh2)
1271 rose_route->lci2,
1272 rose2asc(rsbuf, &rose_route->dest_addr),
1273 ax2asc(buf, &rose_route->dest_call),
1274 rose_route->neigh2->number);
1297 struct rose_route *u, *rose_route = rose_route_list;
1313 while (rose_route != NULL) {
1314 u = rose_route;
1315 rose_route = rose_route->next;