[ale] Help on eth0 config.
Chris Fowler
cfowler at outpostsentinel.com
Tue Dec 18 13:36:21 EST 2001
My understanding on these things are bleak. I'm having a problem with this section of code. When I set the destination address, I get
can bind address. ip2sip is a function that converts my 32bit stored number to a string of "A.B.C.D" My problem could be in INET_Resolv.
void
do_net(void)
{
struct ifreq ifr;
struct sockaddr_in sa;
struct sockaddr sa2;
char host[128];
int sockfd;
/* Create a channel to the NET kernel. */
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
err_quit("create socket");
bzero(&ifr, sizeof(struct ifreq));
strcpy(ifr.ifr_name, INTERFACE);
ifr.ifr_flags |= (IFF_UP | IFF_RUNNING);
if (ioctl(sockfd, SIOCSIFFLAGS, &ifr) == -1)
perror("SIOCSIFFLAGS");
/* Destination */
INET_resolve((char *)ip2sip(cfg.ip), &sa);
memcpy((char *)&ifr.ifr_dstaddr, (char *)&sa, SOCKSIZE);
if(ioctl(sockfd, SIOCSIFDSTADDR, &ifr) == -1)
err_quit("SIOCSIFDSTADDR");
/* Netmask */
INET_resolve((char *)ip2sip(cfg.nm), &sa);
memcpy((char *)&ifr.ifr_netmask, (char *)&sa, SOCKSIZE);
if(ioctl(sockfd, SIOCSIFNETMASK, &ifr) == -1)
err_quit("SIOCSIFNETMASK");
/* Set broadcast address */
INET_resolve((char *)ip2sip(cfg.br), &sa);
memcpy((char *)&ifr.ifr_broadaddr, (char *)&sa, SOCKSIZE);
if(ioctl(sockfd,SIOCSIFBRDADDR, &ifr) == -1)
err_quit("SIOCSIFBRDADDR");
/* Network should be functionla
* We need to set the system hostmane!
*/
set_host_name();
return;
}
void
INET_resolve(char *host, struct sockaddr_in *sin)
{
sin->sin_family = AF_INET;
sin->sin_port = 0;
// Convert "A.B.C.D to network address.
inet_aton(host, &sin->sin_addr);
return;
}
---
This message has been sent through the ALE general discussion list.
See http://www.ale.org/mailing-lists.shtml for more info. Problems should be
sent to listmaster at ale dot org.
More information about the Ale
mailing list