Default router list processing sub routines. */
| 671 | |
| 672 | /* Default router list processing sub routines. */ |
| 673 | static void |
| 674 | defrouter_addreq(struct nd_defrouter *new) |
| 675 | { |
| 676 | struct sockaddr_in6 def, mask, gate; |
| 677 | struct rt_addrinfo info; |
| 678 | struct rib_cmd_info rc; |
| 679 | unsigned int fibnum; |
| 680 | int error; |
| 681 | |
| 682 | bzero(&def, sizeof(def)); |
| 683 | bzero(&mask, sizeof(mask)); |
| 684 | bzero(&gate, sizeof(gate)); |
| 685 | |
| 686 | def.sin6_len = mask.sin6_len = gate.sin6_len = |
| 687 | sizeof(struct sockaddr_in6); |
| 688 | def.sin6_family = gate.sin6_family = AF_INET6; |
| 689 | gate.sin6_addr = new->rtaddr; |
| 690 | fibnum = new->ifp->if_fib; |
| 691 | |
| 692 | bzero((caddr_t)&info, sizeof(info)); |
| 693 | info.rti_flags = RTF_GATEWAY; |
| 694 | info.rti_info[RTAX_DST] = (struct sockaddr *)&def; |
| 695 | info.rti_info[RTAX_GATEWAY] = (struct sockaddr *)&gate; |
| 696 | info.rti_info[RTAX_NETMASK] = (struct sockaddr *)&mask; |
| 697 | |
| 698 | NET_EPOCH_ASSERT(); |
| 699 | error = rib_action(fibnum, RTM_ADD, &info, &rc); |
| 700 | if (error == 0) { |
| 701 | struct nhop_object *nh = nhop_select_func(rc.rc_nh_new, 0); |
| 702 | rt_routemsg(RTM_ADD, rc.rc_rt, nh, fibnum); |
| 703 | new->installed = 1; |
| 704 | } |
| 705 | } |
| 706 | |
| 707 | /* |
| 708 | * Remove the default route for a given router. |
no test coverage detected