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);