Lines Matching refs:rtm

213 			struct rt_msghdr *rtm, struct rib_cmd_info *rc);
217 static void send_rtm_reply(struct socket *so, struct rt_msghdr *rtm,
675 fill_addrinfo(struct rt_msghdr *rtm, int len, struct linear_buffer *lb, u_int fibnum, in fill_addrinfo() argument
680 rtm->rtm_pid = curproc->p_pid; in fill_addrinfo()
681 info->rti_addrs = rtm->rtm_addrs; in fill_addrinfo()
683 info->rti_mflags = rtm->rtm_inits; in fill_addrinfo()
684 info->rti_rmx = &rtm->rtm_rmx; in fill_addrinfo()
691 if (rt_xaddrs((caddr_t)(rtm + 1), len + (caddr_t)rtm, info)) in fill_addrinfo()
694 info->rti_flags = rtm->rtm_flags; in fill_addrinfo()
702 if (rtm->rtm_type != RTM_GET) { in fill_addrinfo()
769 struct rt_msghdr *rtm, struct rib_cmd_info *rc) in handle_rtm_get() argument
791 if ((rtm->rtm_addrs & RTA_NETMASK) == 0) { in handle_rtm_get()
821 if (rtm->rtm_flags & RTF_ANNOUNCE) { in handle_rtm_get()
924 struct rt_msghdr *rtm, *orig_rtm = NULL; in update_rtm_from_info() local
928 rtm = *prtm; in update_rtm_from_info()
930 rtsock_msg_buffer(rtm->rtm_type, info, NULL, &len); in update_rtm_from_info()
937 bcopy(rtm, tmp_rtm, rtm->rtm_msglen); in update_rtm_from_info()
938 orig_rtm = rtm; in update_rtm_from_info()
939 rtm = tmp_rtm; in update_rtm_from_info()
949 .w_tmem = (caddr_t)rtm, in update_rtm_from_info()
952 rtsock_msg_buffer(rtm->rtm_type, info, &w, &len); in update_rtm_from_info()
953 rtm->rtm_addrs = info->rti_addrs; in update_rtm_from_info()
957 *prtm = rtm; in update_rtm_from_info()
975 struct rt_msghdr *rtm; in update_rtm_from_rc() local
979 rtm = *prtm; in update_rtm_from_rc()
990 if (rtm->rtm_addrs & (RTA_IFP | RTA_IFA)) { in update_rtm_from_rc()
1001 rtm->rtm_index = ifp->if_index; in update_rtm_from_rc()
1007 rtm->rtm_index = ifp->if_index; in update_rtm_from_rc()
1012 rtm = *prtm; in update_rtm_from_rc()
1013 rtm->rtm_flags = rc->rc_rt->rte_flags | nhop_get_rtflags(nh); in update_rtm_from_rc()
1014 if (rtm->rtm_flags & RTF_GWFLAG_COMPAT) in update_rtm_from_rc()
1015 rtm->rtm_flags = RTF_GATEWAY | in update_rtm_from_rc()
1016 (rtm->rtm_flags & ~RTF_GWFLAG_COMPAT); in update_rtm_from_rc()
1017 rt_getmetrics(rc->rc_rt, nh, &rtm->rtm_rmx); in update_rtm_from_rc()
1018 rtm->rtm_rmx.rmx_weight = rc->rc_nh_weight; in update_rtm_from_rc()
1060 struct rt_msghdr *rtm = NULL; in rts_send() local
1089 if (len < sizeof(*rtm) || in rts_send()
1100 if ((rtm = malloc(total_len, M_TEMP, M_NOWAIT)) == NULL) in rts_send()
1103 m_copydata(m, 0, len, (caddr_t)rtm); in rts_send()
1107 .base = (char *)rtm + alloc_len, in rts_send()
1111 if (rtm->rtm_version != RTM_VERSION) { in rts_send()
1113 free(rtm, M_TEMP); in rts_send()
1114 rtm = NULL; in rts_send()
1124 if ((error = fill_addrinfo(rtm, len, &lb, fibnum, &info)) != 0) { in rts_send()
1135 if (rtm->rtm_flags & RTF_LLDATA) { in rts_send()
1136 error = lla_rt_output(rtm, &info); in rts_send()
1141 int blackhole_flags = rtm->rtm_flags & (RTF_BLACKHOLE|RTF_REJECT); in rts_send()
1153 switch (rtm->rtm_type) { in rts_send()
1156 if (rtm->rtm_type == RTM_ADD) { in rts_send()
1162 error = rib_action(fibnum, rtm->rtm_type, &info, &rc); in rts_send()
1177 rtm->rtm_index = nh->nh_ifp->if_index; in rts_send()
1178 rtm->rtm_flags = rc.rc_rt->rte_flags | nhop_get_rtflags(nh); in rts_send()
1201 error = handle_rtm_get(&info, fibnum, rtm, &rc); in rts_send()
1215 error = update_rtm_from_rc(&info, &rtm, alloc_len, &rc, nh); in rts_send()
1237 if (rtm != NULL) { in rts_send()
1251 if (update_rtm_from_info(&info, &rtm, alloc_len) != 0) { in rts_send()
1258 send_rtm_reply(so, rtm, m, saf, fibnum, error); in rts_send()
1269 send_rtm_reply(struct socket *so, struct rt_msghdr *rtm, struct mbuf *m, in send_rtm_reply() argument
1279 if (rtm != NULL) in send_rtm_reply()
1280 free(rtm, M_TEMP); in send_rtm_reply()
1288 if (rtm != NULL) { in send_rtm_reply()
1290 rtm->rtm_errno = rtm_errno; in send_rtm_reply()
1292 rtm->rtm_flags |= RTF_DONE; in send_rtm_reply()
1294 m_copyback(m, 0, rtm->rtm_msglen, (caddr_t)rtm); in send_rtm_reply()
1295 if (m->m_pkthdr.len < rtm->rtm_msglen) { in send_rtm_reply()
1298 } else if (m->m_pkthdr.len > rtm->rtm_msglen) in send_rtm_reply()
1299 m_adj(m, rtm->rtm_msglen - m->m_pkthdr.len); in send_rtm_reply()
1301 free(rtm, M_TEMP); in send_rtm_reply()
1708 struct rt_msghdr *rtm; in rtsock_msg_mbuf() local
1751 rtm = mtod(m, struct rt_msghdr *); in rtsock_msg_mbuf()
1752 bzero((caddr_t)rtm, len); in rtsock_msg_mbuf()
1777 rtm->rtm_msglen = len; in rtsock_msg_mbuf()
1778 rtm->rtm_version = RTM_VERSION; in rtsock_msg_mbuf()
1779 rtm->rtm_type = type; in rtsock_msg_mbuf()
1798 struct rt_msghdr *rtm = NULL; in rtsock_msg_buffer() local
1850 rtm = (struct rt_msghdr *)w->w_tmem; in rtsock_msg_buffer()
1908 rtm->rtm_version = RTM_VERSION; in rtsock_msg_buffer()
1909 rtm->rtm_type = type; in rtsock_msg_buffer()
1910 rtm->rtm_msglen = len; in rtsock_msg_buffer()
1931 struct rt_msghdr *rtm; in rt_missmsg_fib() local
1948 rtm = mtod(m, struct rt_msghdr *); in rt_missmsg_fib()
1949 rtm->rtm_flags = RTF_DONE | flags; in rt_missmsg_fib()
1950 rtm->rtm_errno = error; in rt_missmsg_fib()
1951 rtm->rtm_addrs = rtinfo->rti_addrs; in rt_missmsg_fib()
2068 struct rt_msghdr *rtm; in rtsock_routemsg_info() local
2089 rtm = mtod(m, struct rt_msghdr *); in rtsock_routemsg_info()
2090 rtm->rtm_addrs = info->rti_addrs; in rtsock_routemsg_info()
2092 rtm->rtm_index = info->rti_ifp->if_index; in rtsock_routemsg_info()
2098 rtm->rtm_flags = info->rti_flags; in rtsock_routemsg_info()
2298 struct rt_msghdr *rtm = (struct rt_msghdr *)w->w_tmem; in sysctl_dumpnhop() local
2300 bzero(&rtm->rtm_index, in sysctl_dumpnhop()
2301 sizeof(*rtm) - offsetof(struct rt_msghdr, rtm_index)); in sysctl_dumpnhop()
2308 rtm->rtm_flags = rtflags | RTF_UP; in sysctl_dumpnhop()
2309 if (rtm->rtm_flags & RTF_GWFLAG_COMPAT) in sysctl_dumpnhop()
2310 rtm->rtm_flags = RTF_GATEWAY | in sysctl_dumpnhop()
2311 (rtm->rtm_flags & ~RTF_GWFLAG_COMPAT); in sysctl_dumpnhop()
2312 rt_getmetrics(rt, nh, &rtm->rtm_rmx); in sysctl_dumpnhop()
2313 rtm->rtm_rmx.rmx_weight = weight; in sysctl_dumpnhop()
2314 rtm->rtm_index = nh->nh_ifp->if_index; in sysctl_dumpnhop()
2315 rtm->rtm_addrs = info.rti_addrs; in sysctl_dumpnhop()
2316 error = SYSCTL_OUT(w->w_req, (caddr_t)rtm, size); in sysctl_dumpnhop()