public inbox for ecos-discuss@sourceware.org
 help / color / mirror / Atom feed
* [ECOS] Question about unused 'netmask' var in bootp_support.c
@ 2012-03-02 17:53 Grant Edwards
  2012-03-08  8:39 ` Lange, Bert
  0 siblings, 1 reply; 3+ messages in thread
From: Grant Edwards @ 2012-03-02 17:53 UTC (permalink / raw)
  To: ecos-discuss

I'm working on clearing up some compiler warnings, and one of them is
a warning that the variable 'netmask' is set but never referenced in
bootp_support.c init_net().  The variable in question (netmask) is
declared at line 452, set at line 484, and never referenced (not even
conditionally).

Can I just remove the declaration of netmask at line 452, and remove
line 484 entirely?  Or is this an actual bug because netmask is
supposed to be used for something?

[net/common/current/src/bootp_support.c]

   443	// [Re]initialize the network interface with the info passed from BOOTP
   444	cyg_bool_t
   445	init_net(const char *intf, struct bootp *bp)
   446	{
   447	    struct sockaddr_in *addrp;
   448	    struct ifreq ifr;
   449	    int s=-1;
   450	    int one = 1;
   451	    struct ecos_rtentry route;
   452	    struct in_addr netmask, gateway;
   453	    unsigned int length;
   454	    int retcode = false;
   455	    
   456	    s = socket(AF_INET, SOCK_DGRAM, 0);
   457	    if (s < 0) {
   458	        perror("socket");
   459	        goto out;
   460	    }
   461	
   462	    if (setsockopt(s, SOL_SOCKET, SO_BROADCAST, &one, sizeof(one))) {
   463	        perror("setsockopt");
   464	        goto out;
   465	    }
   466	
   467	    addrp = (struct sockaddr_in *) &ifr.ifr_addr;
   468	    memset(addrp, 0, sizeof(*addrp));
   469	    addrp->sin_family = AF_INET;
   470	    addrp->sin_len = sizeof(*addrp);
   471	    addrp->sin_port = 0;
   472	    addrp->sin_addr = bp->bp_yiaddr;  // The address BOOTP gave us
   473	
   474	    // Must do this temporarily with default route and netmask so that
   475	    // [sub]netmask can be set.
   476	    strcpy(ifr.ifr_name, intf);
   477	    if (ioctl(s, SIOCSIFADDR, &ifr)) {
   478	        perror("SIOCIFADDR");
   479	        goto out;
   480	    }
   481	
   482	    length = sizeof(addrp->sin_addr);
   483	    if (get_bootp_option(bp, TAG_SUBNET_MASK, &addrp->sin_addr,&length)) {
   484	        netmask = addrp->sin_addr;
   485	        if (ioctl(s, SIOCSIFNETMASK, &ifr)) {
   486	            perror("SIOCSIFNETMASK");
   487	            goto out;
   488	        }
   489	        // Must do this again so that [sub]netmask (and so default route)
   490	        // is taken notice of.
   491	        addrp->sin_addr = bp->bp_yiaddr;  // The address BOOTP gave us
   492	        if (ioctl(s, SIOCSIFADDR, &ifr)) {
   493	            perror("SIOCIFADDR 2");
   494	            goto out;
   495	        }
   496	    }
   497	
   498	    length = sizeof(addrp->sin_addr);    
   499	    if (get_bootp_option(bp, TAG_IP_BROADCAST, &addrp->sin_addr,&length)) {
   500	        if (ioctl(s, SIOCSIFBRDADDR, &ifr)) {
   501	            perror("SIOCSIFBRDADDR");
   502	            goto out;
   503	        }
   504	        // Do not re-set the IFADDR after this; doing *that* resets the
   505	        // BRDADDR to the default!
   506	    }
   507	
   508	    ifr.ifr_flags = IFF_UP | IFF_BROADCAST | IFF_RUNNING;
   509	    if (ioctl(s, SIOCSIFFLAGS, &ifr)) {
   510	        perror("SIOCSIFFLAGS");
   511	        goto out;
   512	    }
   513	
   514	    // Set up routing
   515	    length = sizeof(addrp->sin_addr);
   516	    if (get_bootp_option(bp, TAG_GATEWAY, &gateway,&length)) {
   517	        // ...and it's a nonzero address...
   518	        if ( 0 != gateway.s_addr ) {
   519	            memset(&route, 0, sizeof(route));
   520	            addrp->sin_family = AF_INET;
   521	            addrp->sin_port = 0;
   522	            addrp->sin_len = sizeof(*addrp);
   523	            addrp->sin_addr.s_addr = 0; // Use 0,0,GATEWAY for the default route
   524	            memcpy(&route.rt_dst, addrp, sizeof(*addrp));
   525	            addrp->sin_addr.s_addr = 0;
   526	            memcpy(&route.rt_genmask, addrp, sizeof(*addrp));
   527	            addrp->sin_addr = gateway;
   528	            memcpy(&route.rt_gateway, addrp, sizeof(*addrp));
   529	
   530	            route.rt_dev = ifr.ifr_name;
   531	            route.rt_flags = RTF_UP|RTF_GATEWAY;
   532	            route.rt_metric = 0;
   533	
   534	            if (ioctl(s, SIOCADDRT, &route)) {
   535	                diag_printf("Route - dst: %s",
   536	                  inet_ntoa(((struct sockaddr_in *)&route.rt_dst)->sin_addr));
   537	                diag_printf(", mask: %s",
   538	                  inet_ntoa(((struct sockaddr_in *)&route.rt_genmask)->sin_addr));
   539	                diag_printf(", gateway: %s\n",
   540	                  inet_ntoa(((struct sockaddr_in *)&route.rt_gateway)->sin_addr));
   541	                if (errno != EEXIST) {
   542	                    perror("SIOCADDRT 3");
   543	                    goto out;
   544	                }
   545	            }
   546	        }
   547	    }
   548	    retcode = true;
   549	    
   550	#ifdef CYGINT_ISO_DNS
   551	    {
   552	#define MAX_IP_ADDR_LEN 16
   553	        char buf[BP_MAX_OPTION_LEN+1];  
   554	        memset(buf,0,sizeof(buf));
   555	        length = sizeof(buf);
   556	        if (get_bootp_option(bp, TAG_DOMAIN_NAME, buf, &length)) {
   557	            setdomainname(buf, length);
   558	        }
   559	        length = sizeof(buf);
   560	        if (get_bootp_option(bp, TAG_DOMAIN_SERVER, buf, &length)) {
   561	            cyg_dns_res_init((struct in_addr *)buf);
   562	        }
   563	    }
   564	#endif
   565	
   566	#ifdef CYGNUM_NET_SNTP_UNICAST_MAXDHCP
   567	    {
   568	        struct in_addr dhcp_addrs[CYGNUM_NET_SNTP_UNICAST_MAXDHCP];
   569	
   570	        /* Removed any previously registered addresses */
   571	        cyg_sntp_set_servers(NULL, 0);
   572	
   573	        /* See if we received any NTP servers from DHCP */
   574	        length = sizeof(dhcp_addrs);
   575	        if (get_bootp_option(bp, TAG_NTP_SERVER, &dhcp_addrs[0], &length))
   576	        {
   577	                static struct sockaddr ntp_servers[CYGNUM_NET_SNTP_UNICAST_MAXDHCP];
   578	            struct servent *service;
   579	                cyg_uint32 num;
   580	
   581	            /* See how many addresses we got.  The length should always
   582	             * be a multiple of 4, but cut off any extra bytes and
   583	             * use what we got.
   584	             */
   585	            length /= sizeof(struct in_addr);
   586	
   587	            /* Fill out a sockaddr array for the NTP client */
   588	            service = getservbyname("ntp", "udp");
   589	            CYG_CHECK_DATA_PTR(service, "NTP service not found.");
   590	            memset(&ntp_servers[0], 0, sizeof(ntp_servers));
   591	            for (num = 0; num < length; num++)
   592	            {
   593	                                struct sockaddr_in *saddr = (struct sockaddr_in *)&ntp_servers[num];
   594	
   595	                saddr->sin_len = sizeof(*saddr);
   596	                saddr->sin_family = AF_INET;
   597	                saddr->sin_port = service->s_port;  /* Already network-endian */
   598	                saddr->sin_addr = dhcp_addrs[num];  /* Already network-endian */
   599	            }
   600	
   601	            /* Configure the client with the array */
   602	            cyg_sntp_set_servers(&ntp_servers[0], num);
   603	        }
   604	    }
   605	#endif /* CYGNUM_NET_SNTP_UNICAST_MAXDHCP */
   606	 out:
   607	    if (s != -1) 
   608	      close(s);
   609	    return retcode;
   610	}


-- 
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss

^ permalink raw reply	[flat|nested] 3+ messages in thread

* RE: [ECOS] Question about unused 'netmask' var in bootp_support.c
  2012-03-02 17:53 [ECOS] Question about unused 'netmask' var in bootp_support.c Grant Edwards
@ 2012-03-08  8:39 ` Lange, Bert
  2012-03-08 15:03   ` [ECOS] " Grant Edwards
  0 siblings, 1 reply; 3+ messages in thread
From: Lange, Bert @ 2012-03-08  8:39 UTC (permalink / raw)
  To: ecos-discuss

Hello Edward,

> Can I just remove the declaration of netmask at line 452, and remove
> line 484 entirely?  Or is this an actual bug because netmask is
> supposed to be used for something?
I would remove it.
In case of failure anybody will hopefully find your message on this list.

regards,
Bert








--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [ECOS] Re: Question about unused 'netmask' var in bootp_support.c
  2012-03-08  8:39 ` Lange, Bert
@ 2012-03-08 15:03   ` Grant Edwards
  0 siblings, 0 replies; 3+ messages in thread
From: Grant Edwards @ 2012-03-08 15:03 UTC (permalink / raw)
  To: ecos-discuss

On 2012-03-08, Lange, Bert <b.lange@hzdr.de> wrote:
> Hello Edward,
>
>> Can I just remove the declaration of netmask at line 452, and remove
>> line 484 entirely?  Or is this an actual bug because netmask is
>> supposed to be used for something?

> I would remove it.

That's what I've decided to do.

I'm also addressing similar warnings in other files.

Variables that are never referenced at all are being removed.
Variables that are set but then only referenced in conditionally
compiled code are being declared with gcc's "unused" attribute.

-- 
Grant Edwards               grant.b.edwards        Yow! Did YOU find a
                                  at               DIGITAL WATCH in YOUR box
                              gmail.com            of VELVEETA?


-- 
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2012-03-08 15:03 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-03-02 17:53 [ECOS] Question about unused 'netmask' var in bootp_support.c Grant Edwards
2012-03-08  8:39 ` Lange, Bert
2012-03-08 15:03   ` [ECOS] " Grant Edwards

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).