On 03/24/16 15:47, Alexander Bluhm wrote: > On Thu, Mar 24, 2016 at 03:03:18PM +0100, Florian Riehm wrote: >> -void rt_missmsg(int, struct rt_addrinfo *, int, u_int, int, u_int); >> +void rt_missmsg(int, struct rt_addrinfo *, int, u_char, u_int, int, >> u_int); > >> -rt_missmsg(int type, struct rt_addrinfo *rtinfo, int flags, u_int ifidx, >> - int error, u_int tableid) >> +rt_missmsg(int type, struct rt_addrinfo *rtinfo, int flags, uint8_t prio, >> + u_int ifidx, int error, u_int tableid) > > You should use uint8_t in both prototype and function definition. > > otherwise OK bluhm@ >
Thanks, Updated patch below. Florian Index: net/route.c =================================================================== RCS file: /openbsd//src/sys/net/route.c,v retrieving revision 1.296 diff -u -p -r1.296 route.c --- net/route.c 7 Mar 2016 18:44:00 -0000 1.296 +++ net/route.c 24 Mar 2016 14:55:12 -0000 @@ -248,8 +248,8 @@ rt_match(struct sockaddr *dst, uint32_t error = rtrequest(RTM_RESOLVE, &info, RTP_DEFAULT, &rt, tableid); if (error) { - rt_missmsg(RTM_MISS, &info, 0, 0, error, - tableid); + rt_missmsg(RTM_MISS, &info, 0, RTP_NONE, 0, + error, tableid); } else { /* Inform listeners of the new route */ rt_sendmsg(rt, RTM_ADD, tableid); @@ -488,7 +488,8 @@ rt_sendmsg(struct rtentry *rt, int cmd, info.rti_info[RTAX_IFA] = rt->rt_ifa->ifa_addr; } - rt_missmsg(cmd, &info, rt->rt_flags, rt->rt_ifidx, 0, rtableid); + rt_missmsg(cmd, &info, rt->rt_flags, rt->rt_priority, rt->rt_ifidx, 0, + rtableid); if_put(ifp); } @@ -522,6 +523,7 @@ rtredirect(struct sockaddr *dst, struct struct ifaddr *ifa; unsigned int ifidx = 0; int flags = RTF_GATEWAY|RTF_HOST; + uint8_t prio = RTP_NONE; splsoftassert(IPL_SOFTNET); @@ -578,8 +580,10 @@ create: rt = NULL; error = rtrequest(RTM_ADD, &info, RTP_DEFAULT, &rt, rdomain); - if (error == 0) + if (error == 0) { flags = rt->rt_flags; + prio = rt->rt_priority; + } stat = &rtstat.rts_dynamic; } else { /* @@ -588,6 +592,7 @@ create: */ rt->rt_flags |= RTF_MODIFIED; flags |= RTF_MODIFIED; + prio = rt->rt_priority; stat = &rtstat.rts_newgateway; rt_setgate(rt, gateway); } @@ -609,7 +614,7 @@ out: info.rti_info[RTAX_DST] = dst; info.rti_info[RTAX_GATEWAY] = gateway; info.rti_info[RTAX_AUTHOR] = src; - rt_missmsg(RTM_REDIRECT, &info, flags, ifidx, error, rdomain); + rt_missmsg(RTM_REDIRECT, &info, flags, prio, ifidx, error, rdomain); } /* @@ -638,7 +643,8 @@ rtdeletemsg(struct rtentry *rt, struct i info.rti_flags = rt->rt_flags; ifidx = rt->rt_ifidx; error = rtrequest_delete(&info, rt->rt_priority, ifp, &rt, tableid); - rt_missmsg(RTM_DELETE, &info, info.rti_flags, ifidx, error, tableid); + rt_missmsg(RTM_DELETE, &info, info.rti_flags, rt->rt_priority, ifidx, + error, tableid); if (error == 0) rtfree(rt); return (error); Index: net/route.h =================================================================== RCS file: /openbsd//src/sys/net/route.h,v retrieving revision 1.132 diff -u -p -r1.132 route.h --- net/route.h 24 Feb 2016 22:41:53 -0000 1.132 +++ net/route.h 24 Mar 2016 14:55:12 -0000 @@ -360,7 +360,7 @@ void rt_maskedcopy(struct sockaddr *, struct sockaddr *rt_plen2mask(struct rtentry *, struct sockaddr_in6 *); void rt_sendmsg(struct rtentry *, int, u_int); void rt_sendaddrmsg(struct rtentry *, int); -void rt_missmsg(int, struct rt_addrinfo *, int, u_int, int, u_int); +void rt_missmsg(int, struct rt_addrinfo *, int, uint8_t, u_int, int, u_int); int rt_setgate(struct rtentry *, struct sockaddr *); int rt_checkgate(struct ifnet *, struct rtentry *, struct sockaddr *, unsigned int, struct rtentry **); Index: net/rtsock.c =================================================================== RCS file: /openbsd//src/sys/net/rtsock.c,v retrieving revision 1.186 diff -u -p -r1.186 rtsock.c --- net/rtsock.c 12 Jan 2016 09:27:46 -0000 1.186 +++ net/rtsock.c 24 Mar 2016 14:55:12 -0000 @@ -1063,8 +1063,8 @@ again: * destination. */ void -rt_missmsg(int type, struct rt_addrinfo *rtinfo, int flags, u_int ifidx, - int error, u_int tableid) +rt_missmsg(int type, struct rt_addrinfo *rtinfo, int flags, uint8_t prio, + u_int ifidx, int error, u_int tableid) { struct rt_msghdr *rtm; struct mbuf *m; @@ -1077,6 +1077,7 @@ rt_missmsg(int type, struct rt_addrinfo return; rtm = mtod(m, struct rt_msghdr *); rtm->rtm_flags = RTF_DONE | flags; + rtm->rtm_priority = prio; rtm->rtm_errno = error; rtm->rtm_tableid = tableid; rtm->rtm_addrs = rtinfo->rti_addrs; Index: netinet/in_pcb.c =================================================================== RCS file: /openbsd//src/sys/netinet/in_pcb.c,v retrieving revision 1.197 diff -u -p -r1.197 in_pcb.c --- netinet/in_pcb.c 23 Mar 2016 15:50:36 -0000 1.197 +++ netinet/in_pcb.c 24 Mar 2016 14:55:12 -0000 @@ -692,8 +692,8 @@ in_losing(struct inpcb *inp) info.rti_info[RTAX_DST] = &inp->inp_route.ro_dst; info.rti_info[RTAX_GATEWAY] = rt->rt_gateway; info.rti_info[RTAX_NETMASK] = rt_plen2mask(rt, &sa_mask); - rt_missmsg(RTM_LOSING, &info, rt->rt_flags, rt->rt_ifidx, 0, - inp->inp_rtableid); + rt_missmsg(RTM_LOSING, &info, rt->rt_flags, rt->rt_priority, + rt->rt_ifidx, 0, inp->inp_rtableid); if (rt->rt_flags & RTF_DYNAMIC) (void)rtrequest(RTM_DELETE, &info, rt->rt_priority, NULL, inp->inp_rtableid);