Introduction
Introduction Statistics Contact Development Disclaimer Help
change iptoaddr, im not sure if it was correct - sdhcp - simple dhcp client
git clone git://git.codemadness.org/sdhcp
Log
Files
Refs
LICENSE
---
commit 98a77a0f7ccea2df3ca9182ff82d21e6b33193b1
parent 970e3fa9791b1c223a0ae2f323680dee8372b838
Author: Hiltjo Posthuma <[email protected]>
Date: Fri, 25 Apr 2014 22:54:04 +0200
change iptoaddr, im not sure if it was correct
Signed-off-by: Hiltjo Posthuma <[email protected]>
Diffstat:
M sdhcp.c | 32 ++++++++++++++++-------------…
1 file changed, 17 insertions(+), 15 deletions(-)
---
diff --git a/sdhcp.c b/sdhcp.c
@@ -107,24 +107,25 @@ hnput(unsigned char *dst, unsigned long long src, size_t …
dst[i] = (src >> (n * 8)) & 0xff;
}
-static struct sockaddr
-iptoaddr(unsigned char ip[4], int port)
+static struct sockaddr *
+iptoaddr(struct sockaddr *ifaddr, unsigned char ip[4], int port)
{
- struct sockaddr_in ifaddr;
+ struct sockaddr_in *in = (struct sockaddr_in *)ifaddr;
- ifaddr.sin_family = AF_INET;
- ifaddr.sin_port = htons(port);
- memcpy(&ifaddr.sin_addr, ip, sizeof ifaddr.sin_addr);
- return *(struct sockaddr*)&ifaddr;
+ in->sin_family = AF_INET;
+ in->sin_port = htons(port);
+ memcpy(&(in->sin_addr), ip, sizeof in->sin_addr);
+ return ifaddr;
}
/* sendto UDP wrapper */
static ssize_t
udpsend(unsigned char ip[4], int fd, void *data, size_t n) {
- struct sockaddr addr = iptoaddr(ip, 67);
+ struct sockaddr addr;
socklen_t addrlen = sizeof addr;
ssize_t sent;
+ iptoaddr(&addr, ip, 67); /* bootp server */
if((sent = sendto(fd, data, n, 0, &addr, addrlen)) == -1)
eprintf("sendto:");
return sent;
@@ -133,10 +134,11 @@ udpsend(unsigned char ip[4], int fd, void *data, size_t n…
/* recvfrom UDP wrapper */
static ssize_t
udprecv(unsigned char ip[4], int fd, void *data, size_t n) {
- struct sockaddr addr = iptoaddr(ip, 68);
+ struct sockaddr addr;
socklen_t addrlen = sizeof addr;
ssize_t r;
+ iptoaddr(&addr, ip, 68); /* bootp client */
if((r = recvfrom(fd, data, n, 0, &addr, &addrlen)) == -1)
eprintf("recvfrom:");
return r;
@@ -153,19 +155,19 @@ setip(unsigned char ip[4], unsigned char mask[4], unsigne…
memset(&rtreq, 0, sizeof(rtreq));
strlcpy(ifreq.ifr_name, ifname, IF_NAMESIZE);
- ifreq.ifr_addr = iptoaddr(ip, 0);
+ iptoaddr(&(ifreq.ifr_addr), ip, 0);
if((fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP)) == -1)
eprintf("can't set ip, socket:");
ioctl(fd, SIOCSIFADDR, &ifreq);
- ifreq.ifr_netmask = iptoaddr(mask, 0);
+ iptoaddr(&(ifreq.ifr_netmask), mask, 0);
ioctl(fd, SIOCSIFNETMASK, &ifreq);
ifreq.ifr_flags = IFF_UP | IFF_RUNNING | IFF_BROADCAST | IFF_MULTICAST;
ioctl(fd, SIOCSIFFLAGS, &ifreq);
/* gw */
rtreq.rt_flags = (RTF_UP | RTF_GATEWAY);
- rtreq.rt_gateway = iptoaddr(gateway, 0);
- rtreq.rt_genmask = iptoaddr(IP(0, 0, 0, 0), 0);
- rtreq.rt_dst = iptoaddr(IP(0, 0, 0, 0), 0);
+ iptoaddr(&(rtreq.rt_gateway), gateway, 0);
+ iptoaddr(&(rtreq.rt_genmask), IP(0, 0, 0, 0), 0);
+ iptoaddr(&(rtreq.rt_dst), IP(0, 0, 0, 0), 0);
ioctl(fd, SIOCADDRT, &rtreq);
close(fd);
@@ -455,7 +457,7 @@ main(int argc, char *argv[])
ioctl(sock, SIOCGIFINDEX, &ifreq);
if(setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, &ifreq, sizeof ifreq)…
eprintf("setsockopt:");
- addr = iptoaddr(IP(255, 255, 255, 255), 68);
+ iptoaddr(&addr, IP(255, 255, 255, 255), 68);
if(bind(sock, (void*)&addr, sizeof addr) != 0)
eprintf("bind:");
ioctl(sock, SIOCGIFHWADDR, &ifreq);
You are viewing proxied material from codemadness.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.