On 10/01/2018 04:15 PM, Hoang Le wrote:
> INADDR_ANY is hard-coded when activating UDP bearer. So, we could not
> binding to a specific IP address even with replicast mode using - given

s/binding/bind

> remote ip address instead of using multicast ip address.
> 
> In this commit, we fixed it by checking and switch to use appropriate
> ip address.

It's better to add "local" before "ip address" in the sentences above,
which will be much clear.

In other words, we can say ""switch to use appropriate local ip address."

Except the minor comments above, the patch is pretty good with me, thanks!

Acked-by: Ying Xue <ying....@windriver.com>

> 
> before:
> $netstat -plu
> Active Internet connections (only servers)
> Proto Recv-Q Send-Q Local Address           Foreign Address
> udp        0      0 **0.0.0.0:6118**            0.0.0.0:*
> 
> after:
> $netstat -plu
> Active Internet connections (only servers)
> Proto Recv-Q Send-Q Local Address           Foreign Address
> udp        0      0 **10.0.0.2:6118**           0.0.0.0:*
> 
> Signed-off-by: Hoang Le <hoang.h...@dektech.com.au>
> ---
>  net/tipc/udp_media.c | 18 +++++++++++++++---
>  1 file changed, 15 insertions(+), 3 deletions(-)
> 
> diff --git a/net/tipc/udp_media.c b/net/tipc/udp_media.c
> index 9783101bc4a9..10dc59ce9c82 100644
> --- a/net/tipc/udp_media.c
> +++ b/net/tipc/udp_media.c
> @@ -650,6 +650,7 @@ static int tipc_udp_enable(struct net *net, struct 
> tipc_bearer *b,
>       struct udp_tunnel_sock_cfg tuncfg = {NULL};
>       struct nlattr *opts[TIPC_NLA_UDP_MAX + 1];
>       u8 node_id[NODE_ID_LEN] = {0,};
> +     int rmcast = 0;
>  
>       ub = kzalloc(sizeof(*ub), GFP_ATOMIC);
>       if (!ub)
> @@ -680,6 +681,9 @@ static int tipc_udp_enable(struct net *net, struct 
> tipc_bearer *b,
>       if (err)
>               goto err;
>  
> +     /* Checking remote ip address */
> +     rmcast = tipc_udp_is_mcast_addr(&remote);
> +
>       /* Autoconfigure own node identity if needed */
>       if (!tipc_own_id(net)) {
>               memcpy(node_id, local.ipv6.in6_u.u6_addr8, 16);
> @@ -705,7 +709,12 @@ static int tipc_udp_enable(struct net *net, struct 
> tipc_bearer *b,
>                       goto err;
>               }
>               udp_conf.family = AF_INET;
> -             udp_conf.local_ip.s_addr = htonl(INADDR_ANY);
> +
> +             /* Switch to use ANY to receive packets from group */
> +             if (rmcast)
> +                     udp_conf.local_ip.s_addr = htonl(INADDR_ANY);
> +             else
> +                     udp_conf.local_ip.s_addr = local.ipv4.s_addr;
>               udp_conf.use_udp_checksums = false;
>               ub->ifindex = dev->ifindex;
>               if (tipc_mtu_bad(dev, sizeof(struct iphdr) +
> @@ -719,7 +728,10 @@ static int tipc_udp_enable(struct net *net, struct 
> tipc_bearer *b,
>               udp_conf.family = AF_INET6;
>               udp_conf.use_udp6_tx_checksums = true;
>               udp_conf.use_udp6_rx_checksums = true;
> -             udp_conf.local_ip6 = in6addr_any;
> +             if (rmcast)
> +                     udp_conf.local_ip6 = in6addr_any;
> +             else
> +                     udp_conf.local_ip6 = local.ipv6;
>               b->mtu = 1280;
>  #endif
>       } else {
> @@ -741,7 +753,7 @@ static int tipc_udp_enable(struct net *net, struct 
> tipc_bearer *b,
>        * is used if it's a multicast address.
>        */
>       memcpy(&b->bcast_addr.value, &remote, sizeof(remote));
> -     if (tipc_udp_is_mcast_addr(&remote))
> +     if (rmcast)
>               err = enable_mcast(ub, &remote);
>       else
>               err = tipc_udp_rcast_add(b, &remote);
> 


_______________________________________________
tipc-discussion mailing list
tipc-discussion@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tipc-discussion

Reply via email to