--- linux-2.6.22.12/net/ipv4/af_inet.c 2007-11-06 10:36:20.000000000 -0800 +++ linux-2.6.22.12-mcast/net/ipv4/af_inet.c 2007-11-15 12:36:53.000000000 -0800 @@ -448,6 +448,7 @@ int inet_bind(struct socket *sock, struc s_addr1 = s_addr; s_addr2 = 0xffffffffl; + chk_addr_ret = inet_addr_type(s_addr); vxdprintk(VXD_CBIT(net, 3), "inet_bind(%p)* %p,%p;%lx " NIPQUAD_FMT, sk, sk->sk_nx_info, sk->sk_socket, @@ -469,11 +470,11 @@ int inet_bind(struct socket *sock, struc s_addr1 = ipv4root; } else if (s_addr != v4_bcast) { /* normal address bind */ - if (!addr_in_nx_info(nxi, s_addr)) + if (!addr_in_nx_info(nxi, s_addr) && + chk_addr_ret != RTN_MULTICAST) return -EADDRNOTAVAIL; } } - chk_addr_ret = inet_addr_type(s_addr); vxdprintk(VXD_CBIT(net, 3), "inet_bind(%p) " NIPQUAD_FMT ", " NIPQUAD_FMT ", " NIPQUAD_FMT, NX_CAPABLE