This is the mail archive of the
ecos-discuss@sourceware.org
mailing list for the eCos project.
Re: How to send UDP broadcast to 255.255.255.255?
- From: Andrew Lunn <andrew at lunn dot ch>
- To: Grant Edwards <grante at visi dot com>
- Cc: ecos-discuss at sources dot redhat dot com
- Date: Tue, 16 Jun 2009 08:43:48 +0200
- Subject: Re: [ECOS] How to send UDP broadcast to 255.255.255.255?
- References: <h16151$c8k$1@ger.gmane.org>
On Mon, Jun 15, 2009 at 05:41:54PM +0000, Grant Edwards wrote:
> I've been asked by one of my internal customers how to send a
> UDP broadcast packet to IP address 255.255.255.255.
Hi Grant
If you have a debugger handy, try putting a break point here:
src/sys/netinet/in_pcb.c
int
in_pcbladdr(inp, nam, plocal_sin)
register struct inpcb *inp;
struct sockaddr *nam;
struct sockaddr_in **plocal_sin;
{
struct in_ifaddr *ia;
register struct sockaddr_in *sin = (struct sockaddr_in *)nam;
if (nam->sa_len != sizeof (*sin))
return (EINVAL);
if (sin->sin_family != AF_INET)
return (EAFNOSUPPORT);
if (sin->sin_port == 0)
return (EADDRNOTAVAIL);
if (!TAILQ_EMPTY(&in_ifaddrhead)) {
/*
* If the destination address is INADDR_ANY,
* use the primary local address.
* If the supplied address is INADDR_BROADCAST,
* and the primary interface supports broadcast,
* choose the broadcast address for that interface.
*/
#define satosin(sa) ((struct sockaddr_in *)(sa))
#define sintosa(sin) ((struct sockaddr *)(sin))
#define ifatoia(ifa) ((struct in_ifaddr *)(ifa))
if (sin->sin_addr.s_addr == INADDR_ANY)
sin->sin_addr = IA_SIN(TAILQ_FIRST(&in_ifaddrhead))->sin_addr;
else if (sin->sin_addr.s_addr == (u_long)INADDR_BROADCAST &&
(TAILQ_FIRST(&in_ifaddrhead)->ia_ifp->if_flags & IFF_BROADCAST))
sin->sin_addr = satosin(&TAILQ_FIRST(&in_ifaddrhead)->ia_broadaddr)->sin_addr;
Unfortunately, if this is the place the address is being changed, i
don't see an obvious way around this.
Andrew
--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss