EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  <20222023  2024  Index 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  <20222023  2024 
<== Date ==> <== Thread ==>

Subject: Re: Recsync: RecCeiver Server announcement contains Broadcast address instead of server ip address
From: Heinz Junkes via Tech-talk <tech-talk at aps.anl.gov>
To: Michael Davidsaver <mdavidsaver at gmail.com>
Cc: EPICS Tech Talk <tech-talk at aps.anl.gov>
Date: Sat, 23 Apr 2022 20:17:21 +0200
Unfortunately, I don't understand it.

If one would stick to the intended protocol, then wouldn't it work to simply route the packet content with the server address in it into the subnet?

Why is the server IP address not entered in the announcement server but '\xff\xff\xff\xff'?

def __init__(self, tcpport, key=0,
                 tcpaddr='\xff\xff\xff\xff',
                 udpaddrs=[('<broadcast>',5049)],
                 period=15.0):
        if sys.version_info[0] < 3:
            self.msg = _Ann.pack(0x5243, 0, tcpaddr, tcpport, 0, key)
        else:
            self.msg = _Ann.pack(0x5243, 0, tcpaddr.encode('latin-1'), tcpport, 0, key)


And is that why castudp.c contains this workaround?

static void haveCandidate(caster_t *self,
                          casterAnnounce *buf,
                          osiSockAddr* peer)
{
    if(ntohs(buf->pid) != RECAST_MAGIC)
        return; /* not a recast announcement */

    if(ntohs(buf->version)!=0)
        return; /* reserved for later expansion */

    self->nameserv.ia.sin_family = AF_INET;
    if(ntohl(buf->serverIP)==0xffffffff) {
        /* direct from the source */
        self->nameserv.ia.sin_addr = peer->ia.sin_addr;
    } else {
        /* proxied */
        self->nameserv.ia.sin_addr.s_addr = buf->serverIP;
    }
    self->nameserv.ia.sin_port = buf->serverPort;

    /* ignore TOU16(buf,0xA) */

    self->servkey = ntohl(buf->serverKey);

    self->haveserv = 1;
} 

Surely this would not have to be the case if the announcer were to enter his address?

Can you bring light into my darkness?

Danke, Heinz

> On 22. Apr 2022, at 21:41, Michael Davidsaver <mdavidsaver at gmail.com> wrote:
> 
> On 4/22/22 11:51, Heinz Junkes via Tech-talk wrote:
>> Hi,
>> we need to route the announcements from our central Channelfinder server to a subnet so that the
>> recasters on the IOCs in the subnet can send their PV information to the server.
>> Unfortunately, the announcement package does not contain the IP of the server but FF:FF:FF:FF.
> 
> How are you planning to "route"?
> 
> Playing games with routing rules, or mangling via. something like iptables/netfilter won't change
> the IP source address, which is what SERV ADDR == 0xffffffff means (as with CA or PVA).
> 
> If you are thinking to create an active repeater (application level proxy), then this app. will
> need to copy the original IP source address into SERV ADDR field.
> 
> https://github.com/ChannelFinder/recsync#udp-protocol
> 
> 
>> root@priscilla:~# socat -ls -u -v -x UDP4-RECVFROM:5049,broadcast,fork,bind=141.14.143.255 UDP4-SENDTO:10.0.1.255:5049,broadcast
>>> 2022/04/22 17:22:18.879313  length=16 from=0 to=15
>> 52 43 00 00 ff ff ff ff 84 81 00 00 61 bf c1 23  RC..........a..#
>> Gruss Heinz
> 


Replies:
Re: Recsync: RecCeiver Server announcement contains Broadcast address instead of server ip address Michael Davidsaver via Tech-talk
References:
Recsync: RecCeiver Server announcement contains Broadcast address instead of server ip address Heinz Junkes via Tech-talk
Re: Recsync: RecCeiver Server announcement contains Broadcast address instead of server ip address Michael Davidsaver via Tech-talk

Navigate by Date:
Prev: Re: Recsync: RecCeiver Server announcement contains Broadcast address instead of server ip address Michael Davidsaver via Tech-talk
Next: Re: Recsync: RecCeiver Server announcement contains Broadcast address instead of server ip address Michael Davidsaver via Tech-talk
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  <20222023  2024 
Navigate by Thread:
Prev: Re: Recsync: RecCeiver Server announcement contains Broadcast address instead of server ip address Michael Davidsaver via Tech-talk
Next: Re: Recsync: RecCeiver Server announcement contains Broadcast address instead of server ip address Michael Davidsaver via Tech-talk
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  <20222023  2024 
ANJ, 14 Sep 2022 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·