Re: use rtalloc_mpath in pf_route{,6}

2021-02-15 Thread Claudio Jeker
On Mon, Feb 15, 2021 at 08:02:37PM +1000, David Gwynne wrote:
> if you have multiple links to the same destination, this will let you
> use them via route-to/reply-to/dup-to.
> 
> ok?
> 
> Index: pf.c
> ===
> RCS file: /cvs/src/sys/net/pf.c,v
> retrieving revision 1.1110
> diff -u -p -r1.1110 pf.c
> --- pf.c  12 Feb 2021 16:16:10 -  1.1110
> +++ pf.c  15 Feb 2021 09:59:50 -
> @@ -6020,7 +6020,7 @@ pf_route(struct pf_pdesc *pd, struct pf_
>   dst->sin_addr = s->rt_addr.v4;
>   rtableid = m0->m_pkthdr.ph_rtableid;
>  
> - rt = rtalloc(sintosa(dst), RT_RESOLVE, rtableid);
> + rt = rtalloc_mpath(sintosa(dst), >ip_src.s_addr, rtableid);
>   if (!rtisvalid(rt)) {
>   if (s->rt != PF_DUPTO) {
>   pf_send_icmp(m0, ICMP_UNREACH, ICMP_UNREACH_HOST,
> @@ -6162,7 +6162,8 @@ pf_route6(struct pf_pdesc *pd, struct pf
>   dst->sin6_addr = s->rt_addr.v6;
>   rtableid = m0->m_pkthdr.ph_rtableid;
>  
> - rt = rtalloc(sin6tosa(dst), RT_RESOLVE, rtableid);
> + rt = rtalloc_mpath(sin6tosa(dst), >ip6_src.s6_addr32[0],
> + rtableid);
>   if (!rtisvalid(rt)) {
>   if (s->rt != PF_DUPTO) {
>   pf_send_icmp(m0, ICMP6_DST_UNREACH,
> 

OK claudio@

-- 
:wq Claudio



use rtalloc_mpath in pf_route{,6}

2021-02-15 Thread David Gwynne
if you have multiple links to the same destination, this will let you
use them via route-to/reply-to/dup-to.

ok?

Index: pf.c
===
RCS file: /cvs/src/sys/net/pf.c,v
retrieving revision 1.1110
diff -u -p -r1.1110 pf.c
--- pf.c12 Feb 2021 16:16:10 -  1.1110
+++ pf.c15 Feb 2021 09:59:50 -
@@ -6020,7 +6020,7 @@ pf_route(struct pf_pdesc *pd, struct pf_
dst->sin_addr = s->rt_addr.v4;
rtableid = m0->m_pkthdr.ph_rtableid;
 
-   rt = rtalloc(sintosa(dst), RT_RESOLVE, rtableid);
+   rt = rtalloc_mpath(sintosa(dst), >ip_src.s_addr, rtableid);
if (!rtisvalid(rt)) {
if (s->rt != PF_DUPTO) {
pf_send_icmp(m0, ICMP_UNREACH, ICMP_UNREACH_HOST,
@@ -6162,7 +6162,8 @@ pf_route6(struct pf_pdesc *pd, struct pf
dst->sin6_addr = s->rt_addr.v6;
rtableid = m0->m_pkthdr.ph_rtableid;
 
-   rt = rtalloc(sin6tosa(dst), RT_RESOLVE, rtableid);
+   rt = rtalloc_mpath(sin6tosa(dst), >ip6_src.s6_addr32[0],
+   rtableid);
if (!rtisvalid(rt)) {
if (s->rt != PF_DUPTO) {
pf_send_icmp(m0, ICMP6_DST_UNREACH,