Lines Matching refs:rtm

506 fill_addrinfo(struct rt_msghdr *rtm, int len, u_int fibnum, struct rt_addrinfo *info)  in fill_addrinfo()  argument
511 rtm->rtm_pid = curproc->p_pid; in fill_addrinfo()
512 info->rti_addrs = rtm->rtm_addrs; in fill_addrinfo()
514 info->rti_mflags = rtm->rtm_inits; in fill_addrinfo()
515 info->rti_rmx = &rtm->rtm_rmx; in fill_addrinfo()
522 if (rt_xaddrs((caddr_t)(rtm + 1), len + (caddr_t)rtm, info)) in fill_addrinfo()
525 if (rtm->rtm_flags & RTF_RNH_LOCKED) in fill_addrinfo()
527 info->rti_flags = rtm->rtm_flags; in fill_addrinfo()
536 if (rtm->rtm_type != RTM_GET) { in fill_addrinfo()
631 struct rt_msghdr *rtm, struct rib_cmd_info *rc) in handle_rtm_get() argument
653 if ((rtm->rtm_addrs & RTA_NETMASK) == 0) { in handle_rtm_get()
683 if (rtm->rtm_flags & RTF_ANNOUNCE) { in handle_rtm_get()
737 struct rt_msghdr *rtm = NULL; in rtsock_msg_buffer() local
783 rtm = (struct rt_msghdr *)w->w_tmem; in rtsock_msg_buffer()
830 rtm->rtm_version = RTM_VERSION; in rtsock_msg_buffer()
831 rtm->rtm_type = type; in rtsock_msg_buffer()
832 rtm->rtm_msglen = len; in rtsock_msg_buffer()
940 struct rt_msghdr *rtm, *orig_rtm = NULL; in update_rtm_from_rc() local
944 rtm = *prtm; in update_rtm_from_rc()
955 if (rtm->rtm_addrs & (RTA_IFP | RTA_IFA)) { in update_rtm_from_rc()
966 rtm->rtm_index = ifp->if_index; in update_rtm_from_rc()
972 rtm->rtm_index = ifp->if_index; in update_rtm_from_rc()
975 rtsock_msg_buffer(rtm->rtm_type, info, NULL, &len); in update_rtm_from_rc()
986 bcopy(rtm, tmp_rtm, rtm->rtm_msglen); in update_rtm_from_rc()
987 orig_rtm = rtm; in update_rtm_from_rc()
988 rtm = tmp_rtm; in update_rtm_from_rc()
997 w.w_tmem = (caddr_t)rtm; in update_rtm_from_rc()
999 rtsock_msg_buffer(rtm->rtm_type, info, &w, &len); in update_rtm_from_rc()
1001 rtm->rtm_flags = rc->rc_rt->rte_flags | nhop_get_rtflags(nh); in update_rtm_from_rc()
1002 if (rtm->rtm_flags & RTF_GWFLAG_COMPAT) in update_rtm_from_rc()
1003 rtm->rtm_flags = RTF_GATEWAY | in update_rtm_from_rc()
1004 (rtm->rtm_flags & ~RTF_GWFLAG_COMPAT); in update_rtm_from_rc()
1005 rt_getmetrics(rc->rc_rt, nh, &rtm->rtm_rmx); in update_rtm_from_rc()
1006 rtm->rtm_rmx.rmx_weight = rc->rc_nh_weight; in update_rtm_from_rc()
1007 rtm->rtm_addrs = info->rti_addrs; in update_rtm_from_rc()
1011 *prtm = rtm; in update_rtm_from_rc()
1035 struct rt_msghdr *rtm = NULL; in ff_rtioctl() local
1059 if ((rtm = malloc(alloc_len, M_TEMP, M_NOWAIT)) == NULL) in ff_rtioctl()
1062 bcopy(data, (caddr_t)rtm, len); in ff_rtioctl()
1064 if (len < sizeof(*rtm) || len != rtm->rtm_msglen) in ff_rtioctl()
1070 if (rtm->rtm_version != RTM_VERSION) { in ff_rtioctl()
1072 free(rtm, M_TEMP); in ff_rtioctl()
1073 rtm = NULL; in ff_rtioctl()
1083 if ((error = fill_addrinfo(rtm, len, fibnum, &info)) != 0) { in ff_rtioctl()
1090 if (rtm->rtm_flags & RTF_LLDATA) { in ff_rtioctl()
1091 error = lla_rt_output(rtm, &info); in ff_rtioctl()
1100 int blackhole_flags = rtm->rtm_flags & (RTF_BLACKHOLE|RTF_REJECT); in ff_rtioctl()
1111 switch (rtm->rtm_type) { in ff_rtioctl()
1114 if (rtm->rtm_type == RTM_ADD) { in ff_rtioctl()
1118 error = rib_action(fibnum, rtm->rtm_type, &info, &rc); in ff_rtioctl()
1133 rtm->rtm_index = nh->nh_ifp->if_index; in ff_rtioctl()
1134 rtm->rtm_flags = rc.rc_rt->rte_flags | nhop_get_rtflags(nh); in ff_rtioctl()
1160 error = handle_rtm_get(&info, fibnum, rtm, &rc); in ff_rtioctl()
1172 error = update_rtm_from_rc(&info, &rtm, alloc_len, &rc, nh, maxlen); in ff_rtioctl()
1200 if (rtm != NULL) { in ff_rtioctl()
1218 rtm->rtm_errno = error; in ff_rtioctl()
1220 rtm->rtm_flags |= RTF_DONE; in ff_rtioctl()
1222 bcopy((caddr_t)rtm, data, rtm->rtm_msglen); in ff_rtioctl()
1223 *plen = rtm->rtm_msglen; in ff_rtioctl()
1224 free(rtm, M_TEMP); in ff_rtioctl()
1239 struct rt_msghdr *rtm = NULL;
1264 if ((rtm = malloc(alloc_len, M_TEMP, M_NOWAIT)) == NULL)
1266 bcopy(data, (caddr_t)rtm, len);
1268 if (len < sizeof(*rtm) || len != rtm->rtm_msglen)
1274 if (rtm->rtm_version != RTM_VERSION)
1283 rtm->rtm_pid = curproc->p_pid;
1284 info.rti_addrs = rtm->rtm_addrs;
1286 info.rti_mflags = rtm->rtm_inits;
1287 info.rti_rmx = &rtm->rtm_rmx;
1294 if (rt_xaddrs((caddr_t)(rtm + 1), len + (caddr_t)rtm, &info))
1297 info.rti_flags = rtm->rtm_flags;
1345 switch (rtm->rtm_type) {
1356 (rtm->rtm_flags & RTF_LLDATA) != 0) {
1357 error = lla_rt_output(rtm, &info);
1364 error = rtrequest1_fib(rtm->rtm_type, &info, &saved_nrt,
1371 rtm->rtm_index = saved_nrt->rt_ifp->if_index;
1382 (rtm->rtm_flags & RTF_LLDATA) != 0) {
1383 error = lla_rt_output(rtm, &info);
1410 rtm->rtm_type == RTM_GET) {
1437 (rtm->rtm_type != RTM_GET || info.rti_info[RTAX_GATEWAY])) {
1451 if (rtm->rtm_flags & RTF_ANNOUNCE) {
1496 if (rtm->rtm_addrs & (RTA_IFP | RTA_IFA)) {
1510 rtm->rtm_index = ifp->if_index;
1516 rtm->rtm_index = ifp->if_index;
1520 rtsock_msg_buffer(rtm->rtm_type, &info, NULL, &len);
1533 bcopy(rtm, new_rtm, rtm->rtm_msglen);
1534 free(rtm, M_TEMP);
1535 rtm = new_rtm;
1539 w.w_tmem = (caddr_t)rtm;
1541 rtsock_msg_buffer(rtm->rtm_type, &info, &w, &len);
1544 rtm->rtm_flags = RTF_GATEWAY |
1547 rtm->rtm_flags = rt->rt_flags;
1548 rt_getmetrics(rt, &rtm->rtm_rmx);
1549 rtm->rtm_addrs = info.rti_addrs;
1562 if (rtm != NULL) {
1580 rtm->rtm_errno = error;
1582 rtm->rtm_flags |= RTF_DONE;
1584 bcopy((caddr_t)rtm, data, rtm->rtm_msglen);
1585 *plen = rtm->rtm_msglen;
1586 free(rtm, M_TEMP);