broadcast problem under kernel 2.6 - Networking

This is a discussion on broadcast problem under kernel 2.6 - Networking ; We have a hub-and-spoke network here, with two /30 subnets (deployed network will typically have far more than two such subnets). The hub interface is defined thus: eth1 Link encap:Ethernet HWaddr 00:00:C0:A8:0B:01 inet addr:192.168.11.1 Bcast:192.168.11.255 Mask:255.255.255.252 inet6 addr: fe80::200:c0ff:fea8:b01/64 Scope:Link ...

+ Reply to Thread
Results 1 to 2 of 2

Thread: broadcast problem under kernel 2.6

  1. broadcast problem under kernel 2.6

    We have a hub-and-spoke network here, with two /30 subnets (deployed
    network will typically have far more than two such subnets). The hub
    interface is defined thus:

    eth1 Link encap:Ethernet HWaddr 00:00:C0:A8:0B:01
    inet addr:192.168.11.1 Bcast:192.168.11.255
    Mask:255.255.255.252
    inet6 addr: fe80::200:c0ff:fea8:b01/64 Scope:Link
    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    RX packets:20 errors:0 dropped:0 overruns:0 frame:0
    TX packets:43 errors:0 dropped:4 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:1340 (1.3 Kb) TX bytes:4721 (4.6 Kb)

    eth1:1 Link encap:Ethernet HWaddr 00:00:C0:A8:0B:01
    inet addr:192.168.11.5 Bcast:192.168.11.255
    Mask:255.255.255.252
    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

    Note that the BROADCAST flag is present on both interfaces. Normal
    unicast traffic is passing between the hub and the remote machines fine.

    The trick to this network is that hub's transmitter is received by all
    the remote units, but each remote has a separate channel coming back to
    the hub (which is why this "net of /30 subnets" is used).

    Now I want to broadcast a udp message to all the remotes at once. So I
    try the following, with net_addr=0xFFFFFFFF:

    // set up data for sendto()
    bzero(&servaddr, sizeof(servaddr)) ;
    servaddr.sin_family = AF_INET ;
    servaddr.sin_port = htons(PORT_REMOTE) ;
    servaddr.sin_addr.s_addr = htonl(net_addr) ;

    // set the SO_BROADCAST flag as well,
    // so we can send broadcast messages
    if (net_addr == 0xFFFFFFFF) {
    int flag = 1 ;
    int result = setsockopt(udp_send_fd, SOL_SOCKET, SO_BROADCAST,
    &flag, sizeof(flag)) ;
    if (result < 0) {
    syslog(LOG_ERR, "setsockopt (BROADCAST): %s\n",
    show_error(errno)) ;
    }
    else {
    syslog(LOG_ERR, "setsockopt (BROADCAST) was successful\n") ;
    }
    }

    // send the message
    int result = sendto(udp_send_fd, mesg, mlen, flags, (SA *) &servaddr,
    sizeof(SA)) ; //lint !e740

    Under kernel 2.2, sendto() would succeed, but the network stack would
    actually break this message up into separate messages on each of the
    subnets, using the subnet broadcast address.

    However, under kernel 2.6.11, setsockopt() returns success, sendto()
    returns 20 (which is correct, the packet is 20 bytes), but no packet is
    actually delivered to the eth1 driver. The packet just silently vanishes
    into space. No errors (udp or otherwise) are logged anywhere.

    What is happening here?? Is there something else that I need to do under
    kernel 2.6, to enable udp broadcasts??

    ----== Posted via Newsfeeds.Com - Unlimited-Unrestricted-Secure Usenet News==----
    http://www.newsfeeds.com The #1 Newsgroup Service in the World! 120,000+ Newsgroups
    ----= East and West-Coast Server Farms - Total Privacy via Encryption =----

  2. Re: broadcast problem under kernel 2.6

    Dan Miller wrote in
    news:Xns98D8932B74C33dananacominccom@38.119.71.69:

    > We have a hub-and-spoke network here, with two /30 subnets (deployed
    > network will typically have far more than two such subnets). The hub
    > interface is defined thus:
    >
    > eth1 Link encap:Ethernet HWaddr 00:00:C0:A8:0B:01
    > inet addr:192.168.11.1 Bcast:192.168.11.255
    > Mask:255.255.255.252
    > inet6 addr: fe80::200:c0ff:fea8:b01/64 Scope:Link
    > UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    > RX packets:20 errors:0 dropped:0 overruns:0 frame:0
    > TX packets:43 errors:0 dropped:4 overruns:0 carrier:0
    > collisions:0 txqueuelen:1000
    > RX bytes:1340 (1.3 Kb) TX bytes:4721 (4.6 Kb)
    >
    > eth1:1 Link encap:Ethernet HWaddr 00:00:C0:A8:0B:01
    > inet addr:192.168.11.5 Bcast:192.168.11.255
    > Mask:255.255.255.252
    > UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    >
    > Note that the BROADCAST flag is present on both interfaces. Normal
    > unicast traffic is passing between the hub and the remote machines
    > fine.
    >
    > The trick to this network is that hub's transmitter is received by all
    > the remote units, but each remote has a separate channel coming back
    > to the hub (which is why this "net of /30 subnets" is used).
    >
    > Now I want to broadcast a udp message to all the remotes at once. So
    > I try the following, with net_addr=0xFFFFFFFF:
    >
    > // set up data for sendto()
    > bzero(&servaddr, sizeof(servaddr)) ;
    > servaddr.sin_family = AF_INET ;
    > servaddr.sin_port = htons(PORT_REMOTE) ;
    > servaddr.sin_addr.s_addr = htonl(net_addr) ;
    >
    > // set the SO_BROADCAST flag as well,
    > // so we can send broadcast messages
    > if (net_addr == 0xFFFFFFFF) {
    > int flag = 1 ;
    > int result = setsockopt(udp_send_fd, SOL_SOCKET, SO_BROADCAST,
    > &flag, sizeof(flag)) ;
    > if (result < 0) {
    > syslog(LOG_ERR, "setsockopt (BROADCAST): %s\n",
    > show_error(errno)) ;
    > }
    > else {
    > syslog(LOG_ERR, "setsockopt (BROADCAST) was successful\n") ;
    > }
    > }
    >
    > // send the message
    > int result = sendto(udp_send_fd, mesg, mlen, flags, (SA *)
    > &servaddr,
    > sizeof(SA)) ; //lint !e740
    >
    > Under kernel 2.2, sendto() would succeed, but the network stack would
    > actually break this message up into separate messages on each of the
    > subnets, using the subnet broadcast address.
    >
    > However, under kernel 2.6.11, setsockopt() returns success, sendto()
    > returns 20 (which is correct, the packet is 20 bytes), but no packet
    > is actually delivered to the eth1 driver. The packet just silently
    > vanishes into space. No errors (udp or otherwise) are logged
    > anywhere.
    >
    > What is happening here?? Is there something else that I need to do
    > under kernel 2.6, to enable udp broadcasts??
    >

    BTW, I noticed in the preceding ifconfig listing, that the broadcast
    addresses on the interfaces were not correct!! Even though I specified a
    /30 subnet, the broadcast addresses are still being generated as if these
    were /24 subnets. So I manually corrected that, and the broadcast
    addresses are now correct, but the symptoms that I describe are still
    occuring.

    ----== Posted via Newsfeeds.Com - Unlimited-Unrestricted-Secure Usenet News==----
    http://www.newsfeeds.com The #1 Newsgroup Service in the World! 120,000+ Newsgroups
    ----= East and West-Coast Server Farms - Total Privacy via Encryption =----

+ Reply to Thread