* problem of "ipv4: revert Set rt->rt_iif more sanely on output routes."
@ 2011-04-05 13:05 OGAWA Hirofumi
2011-04-05 14:11 ` OGAWA Hirofumi
2011-04-06 20:28 ` David Miller
0 siblings, 2 replies; 12+ messages in thread
From: OGAWA Hirofumi @ 2011-04-05 13:05 UTC (permalink / raw)
To: David Miller; +Cc: netdev
Hi,
ipv4: Set rt->rt_iif more sanely on output routes.
(1018b5c01636c7c6bda31a719bda34fc631db29a)
The above patch seems to be caused of avahi breakage.
I'm not debugging fully though, avahi is using IP_PKTINFO and checking
in_pktinfo->ipi_ifindex > 0.
And if I reverted above patch, it seems to fix avahi's IP_PKTINFO problem.
Ideas?
Thanks.
--
OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: problem of "ipv4: revert Set rt->rt_iif more sanely on output routes."
2011-04-05 13:05 problem of "ipv4: revert Set rt->rt_iif more sanely on output routes." OGAWA Hirofumi
@ 2011-04-05 14:11 ` OGAWA Hirofumi
2011-04-05 14:57 ` OGAWA Hirofumi
2011-04-06 20:28 ` David Miller
1 sibling, 1 reply; 12+ messages in thread
From: OGAWA Hirofumi @ 2011-04-05 14:11 UTC (permalink / raw)
To: David Miller; +Cc: netdev
OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> writes:
> Hi,
>
> ipv4: Set rt->rt_iif more sanely on output routes.
> (1018b5c01636c7c6bda31a719bda34fc631db29a)
>
> The above patch seems to be caused of avahi breakage.
>
> I'm not debugging fully though, avahi is using IP_PKTINFO and checking
> in_pktinfo->ipi_ifindex > 0.
>
> And if I reverted above patch, it seems to fix avahi's IP_PKTINFO problem.
>
> Ideas?
BTW, simple revert seems to break routing or something instead.
--
OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: problem of "ipv4: revert Set rt->rt_iif more sanely on output routes."
2011-04-05 14:11 ` OGAWA Hirofumi
@ 2011-04-05 14:57 ` OGAWA Hirofumi
0 siblings, 0 replies; 12+ messages in thread
From: OGAWA Hirofumi @ 2011-04-05 14:57 UTC (permalink / raw)
To: David Miller; +Cc: netdev
OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> writes:
> OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> writes:
>
>> Hi,
>>
>> ipv4: Set rt->rt_iif more sanely on output routes.
>> (1018b5c01636c7c6bda31a719bda34fc631db29a)
>>
>> The above patch seems to be caused of avahi breakage.
>>
>> I'm not debugging fully though, avahi is using IP_PKTINFO and checking
>> in_pktinfo->ipi_ifindex > 0.
>>
>> And if I reverted above patch, it seems to fix avahi's IP_PKTINFO problem.
>>
>> Ideas?
>
> BTW, simple revert seems to break routing or something instead.
Just as FYI, this patch seems to fix the problem. (Only slightly tested
and reviewed. Please don't apply this until someone review. )
include/net/route.h | 1 +
net/ipv4/ip_sockglue.c | 2 +-
net/ipv4/route.c | 6 +++++-
net/ipv4/xfrm4_policy.c | 1 +
4 files changed, 8 insertions(+), 2 deletions(-)
diff -puN net/ipv4/route.c~revert-avahi-breaker net/ipv4/route.c
--- linux-2.6/net/ipv4/route.c~revert-avahi-breaker 2011-04-05 22:59:32.000000000 +0900
+++ linux-2.6-hirofumi/net/ipv4/route.c 2011-04-05 23:06:12.000000000 +0900
@@ -1891,6 +1891,7 @@ static int ip_route_input_mc(struct sk_b
#ifdef CONFIG_IP_ROUTE_CLASSID
rth->dst.tclassid = itag;
#endif
+ rth->rt_user_if = dev->ifindex;
rth->rt_iif = dev->ifindex;
rth->dst.dev = init_net.loopback_dev;
dev_hold(rth->dst.dev);
@@ -2026,6 +2027,7 @@ static int __mkroute_input(struct sk_buf
rth->rt_key_src = saddr;
rth->rt_src = saddr;
rth->rt_gateway = daddr;
+ rth->rt_user_if = in_dev->dev->ifindex;
rth->rt_iif = in_dev->dev->ifindex;
rth->dst.dev = (out_dev)->dev;
dev_hold(rth->dst.dev);
@@ -2202,6 +2204,7 @@ local_input:
#ifdef CONFIG_IP_ROUTE_CLASSID
rth->dst.tclassid = itag;
#endif
+ rth->rt_user_if = dev->ifindex;
rth->rt_iif = dev->ifindex;
rth->dst.dev = net->loopback_dev;
dev_hold(rth->dst.dev);
@@ -2401,6 +2404,7 @@ static struct rtable *__mkroute_output(c
rth->rt_mark = oldflp4->flowi4_mark;
rth->rt_dst = fl4->daddr;
rth->rt_src = fl4->saddr;
+ rth->rt_user_if = oldflp4->flowi4_oif ? : dev_out->ifindex;
rth->rt_iif = 0;
/* get references to the devices that are to be hold by the routing
cache entry */
@@ -2716,6 +2720,7 @@ struct dst_entry *ipv4_blackhole_route(s
rt->rt_key_dst = ort->rt_key_dst;
rt->rt_key_src = ort->rt_key_src;
rt->rt_tos = ort->rt_tos;
+ rt->rt_user_if = ort->rt_user_if;
rt->rt_iif = ort->rt_iif;
rt->rt_oif = ort->rt_oif;
rt->rt_mark = ort->rt_mark;
@@ -2725,7 +2730,6 @@ struct dst_entry *ipv4_blackhole_route(s
rt->rt_type = ort->rt_type;
rt->rt_dst = ort->rt_dst;
rt->rt_src = ort->rt_src;
- rt->rt_iif = ort->rt_iif;
rt->rt_gateway = ort->rt_gateway;
rt->rt_spec_dst = ort->rt_spec_dst;
rt->peer = ort->peer;
diff -puN include/net/route.h~revert-avahi-breaker include/net/route.h
--- linux-2.6/include/net/route.h~revert-avahi-breaker 2011-04-05 23:00:34.000000000 +0900
+++ linux-2.6-hirofumi/include/net/route.h 2011-04-05 23:00:24.000000000 +0900
@@ -64,6 +64,7 @@ struct rtable {
__be32 rt_dst; /* Path destination */
__be32 rt_src; /* Path source */
+ int rt_user_if;
int rt_iif;
int rt_oif;
__u32 rt_mark;
diff -puN net/ipv4/xfrm4_policy.c~revert-avahi-breaker net/ipv4/xfrm4_policy.c
--- linux-2.6/net/ipv4/xfrm4_policy.c~revert-avahi-breaker 2011-04-05 23:03:56.000000000 +0900
+++ linux-2.6-hirofumi/net/ipv4/xfrm4_policy.c 2011-04-05 23:04:02.000000000 +0900
@@ -74,6 +74,7 @@ static int xfrm4_fill_dst(struct xfrm_ds
rt->rt_key_dst = fl4->daddr;
rt->rt_key_src = fl4->saddr;
rt->rt_tos = fl4->flowi4_tos;
+ rt->rt_user_if = fl4->flowi4_iif;
rt->rt_iif = fl4->flowi4_iif;
rt->rt_oif = fl4->flowi4_oif;
rt->rt_mark = fl4->flowi4_mark;
diff -puN net/ipv4/ip_sockglue.c~revert-avahi-breaker net/ipv4/ip_sockglue.c
--- linux-2.6/net/ipv4/ip_sockglue.c~revert-avahi-breaker 2011-04-05 23:04:52.000000000 +0900
+++ linux-2.6-hirofumi/net/ipv4/ip_sockglue.c 2011-04-05 23:04:56.000000000 +0900
@@ -62,7 +62,7 @@ static void ip_cmsg_recv_pktinfo(struct
info.ipi_addr.s_addr = ip_hdr(skb)->daddr;
if (rt) {
- info.ipi_ifindex = rt->rt_iif;
+ info.ipi_ifindex = rt->rt_user_if;
info.ipi_spec_dst.s_addr = rt->rt_spec_dst;
} else {
info.ipi_ifindex = 0;
_
--
OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: problem of "ipv4: revert Set rt->rt_iif more sanely on output routes."
2011-04-05 13:05 problem of "ipv4: revert Set rt->rt_iif more sanely on output routes." OGAWA Hirofumi
2011-04-05 14:11 ` OGAWA Hirofumi
@ 2011-04-06 20:28 ` David Miller
2011-04-07 4:31 ` OGAWA Hirofumi
1 sibling, 1 reply; 12+ messages in thread
From: David Miller @ 2011-04-06 20:28 UTC (permalink / raw)
To: hirofumi; +Cc: netdev
From: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
Date: Tue, 05 Apr 2011 22:05:10 +0900
> ipv4: Set rt->rt_iif more sanely on output routes.
> (1018b5c01636c7c6bda31a719bda34fc631db29a)
>
> The above patch seems to be caused of avahi breakage.
>
> I'm not debugging fully though, avahi is using IP_PKTINFO and checking
> in_pktinfo->ipi_ifindex > 0.
>
> And if I reverted above patch, it seems to fix avahi's IP_PKTINFO problem.
in_pktinfo is given to the application only during recvmsg() calls, the
call chain is (for example):
udp_recvmsg()
--> ip_cmsg_recv()
--> ip_cmsg_recv_pktinfo()
Therefore we will only be working with receive packets, whose routes are
computed using ip_route_input*() which will fill in the rt_iif field
appropriately.
The only exception to this would be packets which are looped back, in
which case the cached output route attached to the packet will be used.
Your RFC patch should work, but we're trying to make "struct rtable"
smaller rather than larger.
In what way does routing break if you simply restore the original
rt_iif assignment in output route creation? That's the most preferred
fix for this.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: problem of "ipv4: revert Set rt->rt_iif more sanely on output routes."
2011-04-06 20:28 ` David Miller
@ 2011-04-07 4:31 ` OGAWA Hirofumi
2011-04-07 5:34 ` David Miller
0 siblings, 1 reply; 12+ messages in thread
From: OGAWA Hirofumi @ 2011-04-07 4:31 UTC (permalink / raw)
To: David Miller; +Cc: netdev
David Miller <davem@davemloft.net> writes:
> From: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
> Date: Tue, 05 Apr 2011 22:05:10 +0900
>
>> ipv4: Set rt->rt_iif more sanely on output routes.
>> (1018b5c01636c7c6bda31a719bda34fc631db29a)
>>
>> The above patch seems to be caused of avahi breakage.
>>
>> I'm not debugging fully though, avahi is using IP_PKTINFO and checking
>> in_pktinfo->ipi_ifindex > 0.
>>
>> And if I reverted above patch, it seems to fix avahi's IP_PKTINFO problem.
>
> in_pktinfo is given to the application only during recvmsg() calls, the
> call chain is (for example):
>
> udp_recvmsg()
> --> ip_cmsg_recv()
> --> ip_cmsg_recv_pktinfo()
>
> Therefore we will only be working with receive packets, whose routes are
> computed using ip_route_input*() which will fill in the rt_iif field
> appropriately.
>
> The only exception to this would be packets which are looped back, in
> which case the cached output route attached to the packet will be used.
I see.
> Your RFC patch should work, but we're trying to make "struct rtable"
> smaller rather than larger.
I felt it from git hisotry.
> In what way does routing break if you simply restore the original
> rt_iif assignment in output route creation? That's the most preferred
> fix for this.
I'm not pretty sure though, output message is
ip_finish_output2: No header cache and no neighbour!
I'm not debugging this though,
static inline bool rt_is_output_route(struct rtable *rt)
{
return rt->rt_iif == 0;
}
from review I guess the above is one of cause.
Thanks.
--
OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: problem of "ipv4: revert Set rt->rt_iif more sanely on output routes."
2011-04-07 4:31 ` OGAWA Hirofumi
@ 2011-04-07 5:34 ` David Miller
2011-04-07 5:42 ` David Miller
0 siblings, 1 reply; 12+ messages in thread
From: David Miller @ 2011-04-07 5:34 UTC (permalink / raw)
To: hirofumi; +Cc: netdev
From: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
Date: Thu, 07 Apr 2011 13:31:06 +0900
> I'm not pretty sure though, output message is
>
> ip_finish_output2: No header cache and no neighbour!
>
> I'm not debugging this though,
>
> static inline bool rt_is_output_route(struct rtable *rt)
> {
> return rt->rt_iif == 0;
> }
>
> from review I guess the above is one of cause.
arp_bind_neighbour() is only called if rt_is_output_route() is true
or route is unicast.
If packet is sent using a route for which arp_bind_neighbour() has not
been called, you will see that warning message.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: problem of "ipv4: revert Set rt->rt_iif more sanely on output routes."
2011-04-07 5:34 ` David Miller
@ 2011-04-07 5:42 ` David Miller
2011-04-07 7:19 ` OGAWA Hirofumi
0 siblings, 1 reply; 12+ messages in thread
From: David Miller @ 2011-04-07 5:42 UTC (permalink / raw)
To: hirofumi; +Cc: netdev
From: David Miller <davem@davemloft.net>
Date: Wed, 06 Apr 2011 22:34:00 -0700 (PDT)
> From: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
> Date: Thu, 07 Apr 2011 13:31:06 +0900
>
>> I'm not pretty sure though, output message is
>>
>> ip_finish_output2: No header cache and no neighbour!
>>
>> I'm not debugging this though,
>>
>> static inline bool rt_is_output_route(struct rtable *rt)
>> {
>> return rt->rt_iif == 0;
>> }
>>
>> from review I guess the above is one of cause.
>
> arp_bind_neighbour() is only called if rt_is_output_route() is true
> or route is unicast.
>
> If packet is sent using a route for which arp_bind_neighbour() has not
> been called, you will see that warning message.
Ok, the problem is that, for output routes in original code:
1) user's flow device index is stored in rt->rt_iif
2) arp_bind_neighbour() tests meanwhile used rt->fl.iif
So we do need, for now, to add a new member. But I think for
correct semantics it needs to have inverse meaning to the one
you added in your RFC patch.
So fix is something like:
1) Add "int rt_route_iif;" to struct rtable
2) For input routes, always set rt_route_iif to same value as rt_iif
3) For output routes, always set rt_route_iif to zero. Set rt_iif
as it is done currently.
4) Change rt_is_{output,input}_route() to test rt_route_iif
This should fix the bug and not introduce new regressions.
Can you write and test such a patch with your test case?
Thank you!
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: problem of "ipv4: revert Set rt->rt_iif more sanely on output routes."
2011-04-07 5:42 ` David Miller
@ 2011-04-07 7:19 ` OGAWA Hirofumi
2011-04-07 8:29 ` OGAWA Hirofumi
0 siblings, 1 reply; 12+ messages in thread
From: OGAWA Hirofumi @ 2011-04-07 7:19 UTC (permalink / raw)
To: David Miller; +Cc: netdev
David Miller <davem@davemloft.net> writes:
> So fix is something like:
>
> 1) Add "int rt_route_iif;" to struct rtable
>
> 2) For input routes, always set rt_route_iif to same value as rt_iif
>
> 3) For output routes, always set rt_route_iif to zero. Set rt_iif
> as it is done currently.
>
> 4) Change rt_is_{output,input}_route() to test rt_route_iif
>
> This should fix the bug and not introduce new regressions.
>
> Can you write and test such a patch with your test case?
Ok. I'll try, but I'm not sure I understand the above correctly. Well,
I'll send the patch after testing.
Thanks.
--
OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: problem of "ipv4: revert Set rt->rt_iif more sanely on output routes."
2011-04-07 7:19 ` OGAWA Hirofumi
@ 2011-04-07 8:29 ` OGAWA Hirofumi
2011-04-07 8:32 ` OGAWA Hirofumi
2011-04-07 21:03 ` David Miller
0 siblings, 2 replies; 12+ messages in thread
From: OGAWA Hirofumi @ 2011-04-07 8:29 UTC (permalink / raw)
To: David Miller; +Cc: netdev
OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> writes:
> David Miller <davem@davemloft.net> writes:
>
>> So fix is something like:
>>
>> 1) Add "int rt_route_iif;" to struct rtable
>>
>> 2) For input routes, always set rt_route_iif to same value as rt_iif
>>
>> 3) For output routes, always set rt_route_iif to zero. Set rt_iif
>> as it is done currently.
>>
>> 4) Change rt_is_{output,input}_route() to test rt_route_iif
>>
>> This should fix the bug and not introduce new regressions.
>>
>> Can you write and test such a patch with your test case?
>
> Ok. I'll try, but I'm not sure I understand the above correctly. Well,
> I'll send the patch after testing.
This patch seems to work for avahi-daemon without any warning.
BTW, the above meant change from (there was before) "fl.iif" to
"rt_route_iif"? If so, this patch is not enough. I'm not sure
+ rth->rt_route_iif = 0;
+ rth->rt_iif = oldflp4->flowi4_oif ? : dev_out->ifindex;
is correct one or not. Please review.
Thanks.
--
OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: problem of "ipv4: revert Set rt->rt_iif more sanely on output routes."
2011-04-07 8:29 ` OGAWA Hirofumi
@ 2011-04-07 8:32 ` OGAWA Hirofumi
2011-04-07 20:58 ` David Miller
2011-04-07 21:03 ` David Miller
1 sibling, 1 reply; 12+ messages in thread
From: OGAWA Hirofumi @ 2011-04-07 8:32 UTC (permalink / raw)
To: David Miller; +Cc: netdev
OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> writes:
> OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> writes:
>
>> David Miller <davem@davemloft.net> writes:
>>
>>> So fix is something like:
>>>
>>> 1) Add "int rt_route_iif;" to struct rtable
>>>
>>> 2) For input routes, always set rt_route_iif to same value as rt_iif
>>>
>>> 3) For output routes, always set rt_route_iif to zero. Set rt_iif
>>> as it is done currently.
>>>
>>> 4) Change rt_is_{output,input}_route() to test rt_route_iif
>>>
>>> This should fix the bug and not introduce new regressions.
>>>
>>> Can you write and test such a patch with your test case?
>>
>> Ok. I'll try, but I'm not sure I understand the above correctly. Well,
>> I'll send the patch after testing.
>
> This patch seems to work for avahi-daemon without any warning.
>
> BTW, the above meant change from (there was before) "fl.iif" to
> "rt_route_iif"? If so, this patch is not enough. I'm not sure
>
> + rth->rt_route_iif = 0;
> + rth->rt_iif = oldflp4->flowi4_oif ? : dev_out->ifindex;
>
> is correct one or not. Please review.
Forgot the patch.
--
OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
[PATCH] Fix "Set rt->rt_iif more sanely on output routes."
1018b5c01636c7c6bda31a719bda34fc631db29a breaks rt_is_{output,input}_route.
This became the cause to return "IP_PKTINFO's ->ipi_ifindex == 0".
To fix it, this does
1) Add "int rt_route_iif;" to struct rtable
2) For input routes, always set rt_route_iif to same value as rt_iif
3) For output routes, always set rt_route_iif to zero. Set rt_iif
as it is done currently.
4) Change rt_is_{output,input}_route() to test rt_route_iif
Signed-off-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
---
include/net/route.h | 5 +++--
net/ipv4/route.c | 8 ++++++--
net/ipv4/xfrm4_policy.c | 1 +
3 files changed, 10 insertions(+), 4 deletions(-)
diff -puN include/net/route.h~revert-avahi-breaker include/net/route.h
--- linux-2.6/include/net/route.h~revert-avahi-breaker 2011-04-07 17:12:05.000000000 +0900
+++ linux-2.6-hirofumi/include/net/route.h 2011-04-07 17:12:05.000000000 +0900
@@ -64,6 +64,7 @@ struct rtable {
__be32 rt_dst; /* Path destination */
__be32 rt_src; /* Path source */
+ int rt_route_iif;
int rt_iif;
int rt_oif;
__u32 rt_mark;
@@ -80,12 +81,12 @@ struct rtable {
static inline bool rt_is_input_route(struct rtable *rt)
{
- return rt->rt_iif != 0;
+ return rt->rt_route_iif != 0;
}
static inline bool rt_is_output_route(struct rtable *rt)
{
- return rt->rt_iif == 0;
+ return rt->rt_route_iif == 0;
}
struct ip_rt_acct {
diff -puN net/ipv4/route.c~revert-avahi-breaker net/ipv4/route.c
--- linux-2.6/net/ipv4/route.c~revert-avahi-breaker 2011-04-07 17:12:05.000000000 +0900
+++ linux-2.6-hirofumi/net/ipv4/route.c 2011-04-07 17:12:05.000000000 +0900
@@ -1891,6 +1891,7 @@ static int ip_route_input_mc(struct sk_b
#ifdef CONFIG_IP_ROUTE_CLASSID
rth->dst.tclassid = itag;
#endif
+ rth->rt_route_iif = dev->ifindex;
rth->rt_iif = dev->ifindex;
rth->dst.dev = init_net.loopback_dev;
dev_hold(rth->dst.dev);
@@ -2026,6 +2027,7 @@ static int __mkroute_input(struct sk_buf
rth->rt_key_src = saddr;
rth->rt_src = saddr;
rth->rt_gateway = daddr;
+ rth->rt_route_iif = in_dev->dev->ifindex;
rth->rt_iif = in_dev->dev->ifindex;
rth->dst.dev = (out_dev)->dev;
dev_hold(rth->dst.dev);
@@ -2202,6 +2204,7 @@ local_input:
#ifdef CONFIG_IP_ROUTE_CLASSID
rth->dst.tclassid = itag;
#endif
+ rth->rt_route_iif = dev->ifindex;
rth->rt_iif = dev->ifindex;
rth->dst.dev = net->loopback_dev;
dev_hold(rth->dst.dev);
@@ -2401,7 +2404,8 @@ static struct rtable *__mkroute_output(c
rth->rt_mark = oldflp4->flowi4_mark;
rth->rt_dst = fl4->daddr;
rth->rt_src = fl4->saddr;
- rth->rt_iif = 0;
+ rth->rt_route_iif = 0;
+ rth->rt_iif = oldflp4->flowi4_oif ? : dev_out->ifindex;
/* get references to the devices that are to be hold by the routing
cache entry */
rth->dst.dev = dev_out;
@@ -2716,6 +2720,7 @@ struct dst_entry *ipv4_blackhole_route(s
rt->rt_key_dst = ort->rt_key_dst;
rt->rt_key_src = ort->rt_key_src;
rt->rt_tos = ort->rt_tos;
+ rt->rt_route_iif = ort->rt_route_iif;
rt->rt_iif = ort->rt_iif;
rt->rt_oif = ort->rt_oif;
rt->rt_mark = ort->rt_mark;
@@ -2725,7 +2730,6 @@ struct dst_entry *ipv4_blackhole_route(s
rt->rt_type = ort->rt_type;
rt->rt_dst = ort->rt_dst;
rt->rt_src = ort->rt_src;
- rt->rt_iif = ort->rt_iif;
rt->rt_gateway = ort->rt_gateway;
rt->rt_spec_dst = ort->rt_spec_dst;
rt->peer = ort->peer;
diff -puN net/ipv4/xfrm4_policy.c~revert-avahi-breaker net/ipv4/xfrm4_policy.c
--- linux-2.6/net/ipv4/xfrm4_policy.c~revert-avahi-breaker 2011-04-07 17:12:05.000000000 +0900
+++ linux-2.6-hirofumi/net/ipv4/xfrm4_policy.c 2011-04-07 17:12:05.000000000 +0900
@@ -74,6 +74,7 @@ static int xfrm4_fill_dst(struct xfrm_ds
rt->rt_key_dst = fl4->daddr;
rt->rt_key_src = fl4->saddr;
rt->rt_tos = fl4->flowi4_tos;
+ rt->rt_route_iif = fl4->flowi4_iif;
rt->rt_iif = fl4->flowi4_iif;
rt->rt_oif = fl4->flowi4_oif;
rt->rt_mark = fl4->flowi4_mark;
_
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: problem of "ipv4: revert Set rt->rt_iif more sanely on output routes."
2011-04-07 8:32 ` OGAWA Hirofumi
@ 2011-04-07 20:58 ` David Miller
0 siblings, 0 replies; 12+ messages in thread
From: David Miller @ 2011-04-07 20:58 UTC (permalink / raw)
To: hirofumi; +Cc: netdev
From: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
Date: Thu, 07 Apr 2011 17:32:49 +0900
> OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> writes:
>
>> This patch seems to work for avahi-daemon without any warning.
>>
>> BTW, the above meant change from (there was before) "fl.iif" to
>> "rt_route_iif"? If so, this patch is not enough. I'm not sure
>>
>> + rth->rt_route_iif = 0;
>> + rth->rt_iif = oldflp4->flowi4_oif ? : dev_out->ifindex;
>>
>> is correct one or not. Please review.
>
> Forgot the patch.
I am reviewing your patch right now, thank you so much for working
on this bug.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: problem of "ipv4: revert Set rt->rt_iif more sanely on output routes."
2011-04-07 8:29 ` OGAWA Hirofumi
2011-04-07 8:32 ` OGAWA Hirofumi
@ 2011-04-07 21:03 ` David Miller
1 sibling, 0 replies; 12+ messages in thread
From: David Miller @ 2011-04-07 21:03 UTC (permalink / raw)
To: hirofumi; +Cc: netdev
From: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
Date: Thu, 07 Apr 2011 17:29:04 +0900
> I'm not sure
>
> + rth->rt_route_iif = 0;
> + rth->rt_iif = oldflp4->flowi4_oif ? : dev_out->ifindex;
>
> is correct one or not. Please review.
I am pretty sure this is indeed correct.
In old code this read:
rth->rt_iif = oldflp->oif ? : dev_out->ifindex;
And rt->fl.iif was left without explicit setting, and thus left
as zero (dst_alloc() use to bzero entire rtable object).
So new code is equivalent and provides the necessary semantics.
I think your patch is correct and I will add it to net-2.6, thanks
again!
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2011-04-07 21:04 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-04-05 13:05 problem of "ipv4: revert Set rt->rt_iif more sanely on output routes." OGAWA Hirofumi
2011-04-05 14:11 ` OGAWA Hirofumi
2011-04-05 14:57 ` OGAWA Hirofumi
2011-04-06 20:28 ` David Miller
2011-04-07 4:31 ` OGAWA Hirofumi
2011-04-07 5:34 ` David Miller
2011-04-07 5:42 ` David Miller
2011-04-07 7:19 ` OGAWA Hirofumi
2011-04-07 8:29 ` OGAWA Hirofumi
2011-04-07 8:32 ` OGAWA Hirofumi
2011-04-07 20:58 ` David Miller
2011-04-07 21:03 ` David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).