<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>


        
        
        
        <style type="text/css">P { margin-bottom: 0.08in; }</style>


<p style="margin-bottom: 0in">I try to implement an UDAP
configuration server (legacy protocol to replace an old embedded
wireless client bridge) for a wireless client bridge based on a
Gateworks Ventana board running OpenWrt trunk with ATH9K WLAN nic.</p>
<p style="margin-bottom: 0in">The Openwrt solution uses relayd for
pseudo bridging between WLAN and LAN because true transparent
bridging between WLAN (in infrastructure mode) and ethernet interface
is only possible with 4 address mode of MAC80211 which is not
standardized in IEEE802.11 (can only be used with certain access
points)</p>
<p style="margin-bottom: 0in"><br>
</p>
<p style="margin-bottom: 0in">Problem is now emulating a real
bridging behaviour for incoming broadcasts with destination port of
UDAP protocol. The server should respond with bridge's own source IP
to global broadcast address on both interfaces LAN & WLAN. For
the relayd solution this should be the WLAN interface's IP.</p>
<p style="margin-bottom: 0in"><br>
</p>
<p style="margin-bottom: 0in">IP settings: Wlan0 has
192.168.2.100/24, eth0 has 192.168.254.254/24</p>
<p style="margin-bottom: 0in"><br>
</p>
<p style="margin-bottom: 0in">Short description:</p>
<ol><li><p style="margin-bottom: 0in">The UDAP protocol uses UDP frames
        with server destination port 17784.</p>
        </li><li><p style="margin-bottom: 0in">The UDAP client can send frames to
        IP address of the server. Reply is done with unicast frame</p>
        </li><li><p style="margin-bottom: 0in">The UDAP client can send frames to
        general broadcast address (255.255.255.255). The server should also
        reply to the general broadcast address. So UDAP protocol can also be
        used to scan a client bridge or change it's IP configuration if it's
        IP resides in another subnet then the UDAP client.</p>
        </li><li><p style="margin-bottom: 0in">UDAP client (a Windows PC, PLC,
        etc.) may reside either on the LAN or the WLAN side of the bridge.
        On both sides only one Wlan0-IP should be visible.</p>
</li></ol>
<p style="margin-bottom: 0in"><br>
</p>
<p style="margin-bottom: 0in">Results of my test implementation of
UDAP on OpenWRT using a simple AFINET UDP socket:</p>
<p style="margin-bottom: 0in"><br>
</p>
<ol><li><p style="margin-bottom: 0in">Using the IP unicast destination
        address of the server IP-Wlan0 works fine for both UDAP client
        locations (LAN / WLAN)</p>
        </li><li><p style="margin-bottom: 0in">Sending to general broadcast
        server address from WLAN side ->request is received but reply to
        global broadcast address by calling sendto is denied with
        ENETUNREACH.<br>Reply to the broadcast address 192.168.2.255 worked
        fine but violates requirement 3.<br>Next trial was using setsockopt
        with option SOL_SOCKET,SO_BINDTODEVICE to temporarily bind to wlan0
        interface before sendto to general broadcast address ¡÷ This worked
        fine</p>
        </li><li><p style="margin-bottom: 0in">Sending to general broadcast
        server address from LAN side ->request is received but reply to
        global broadcast address by calling sendto is denied with
        ENETUNREACH.<br>Reply to the broadcast address 192.168.254.255
        worked fine but violates requirement 3.<br>Next trial was using
        setsockopt with option SOL_SOCKET,SO_BINDTODEVICE to temporarily
        bind to eth0 interface before sendto to general broadcast address ¡÷
        This worked but the source address of the response frame is
        192.168.254.254 (eth0's IP). Therefore the UDAP client on LAN side
        sees another IP address than a UDAP client on WLAN side.<br>Next I
        tried to source NAT with iptables to transform the source address to
        wlan0's IP:<br><br>iptables -t nat -A POSTROUTING -p udp ¡Vsport
        17784 -o eth0 -s 192.168.254.254 -j SNAT ¡Vto-source 192.168.2.100 
        </p>
</li></ol>
<p style="margin-bottom: 0in"><br>
</p>
<ol start="2"><p style="margin-bottom: 0in">The source address is changed but
        unfortunately the source port of the frame was changed to 1024, then
        I changed the switch ¡Vto-source 192.168.2.100:17784 ¡÷ No source
        natting occurred!  Is there any chance to configure iptables to only
        change the source IP and keeping the UDP source port?</p><p style="margin-bottom: 0in"><br></p><p style="margin-bottom: 0in"><br>
        </p></ol>
<p style="margin-bottom: 0in">So I have no idea howto achieve the
desired behaviour. Any help is appreciated!!</p><p style="margin-bottom: 0in"><br></p><p style="margin-bottom: 0in">Regards,</p><p style="margin-bottom: 0in">Dierk<br></p>

                                          </div></body>
</html>