summaryrefslogtreecommitdiffstats
path: root/net.c
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2013-02-03 22:55:45 +0000
committerRoy Marples <roy@marples.name>2013-02-03 22:55:45 +0000
commit95fdd136aefd8926154175feb3bf6714549a50f5 (patch)
tree1de01a78eda4297bda6ec1c06de6560b677e676c /net.c
parent5dc65f77b304e1f55c036a7f14a4ed454e365ec6 (diff)
downloaddhcpcd-95fdd136aefd8926154175feb3bf6714549a50f5.tar.xz
Move if_state into interface->if_data as dhcp_state.
This should reduce memory usage for non IPv4 interfaces.
Diffstat (limited to 'net.c')
-rw-r--r--net.c17
1 files changed, 6 insertions, 11 deletions
diff --git a/net.c b/net.c
index 7379ea23..11662a2b 100644
--- a/net.c
+++ b/net.c
@@ -189,17 +189,10 @@ free_interface(struct interface *ifp)
if (ifp == NULL)
return;
+ dhcp_free(ifp);
dhcp6_free(ifp);
ipv6rs_free(ifp);
free_options(ifp->options);
- if (ifp->state) {
- free(ifp->state->old);
- free(ifp->state->new);
- free(ifp->state->offer);
- free(ifp->state->buffer);
- free(ifp->state->clientid);
- free(ifp->state);
- }
free(ifp);
}
@@ -572,6 +565,7 @@ open_udp_socket(struct interface *iface)
int s;
struct sockaddr_in sin;
int n;
+ struct dhcp_state *state;
#ifdef SO_BINDTODEVICE
struct ifreq ifr;
char *p;
@@ -599,14 +593,15 @@ open_udp_socket(struct interface *iface)
n = 1;
if (setsockopt(s, SOL_SOCKET, SO_RCVBUF, &n, sizeof(n)) == -1)
goto eexit;
+ state = D_STATE(iface);
memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_port = htons(DHCP_CLIENT_PORT);
- sin.sin_addr.s_addr = iface->state->addr.s_addr;
+ sin.sin_addr.s_addr = state->addr.s_addr;
if (bind(s, (struct sockaddr *)&sin, sizeof(sin)) == -1)
goto eexit;
- iface->state->udp_fd = s;
+ state->udp_fd = s;
set_cloexec(s);
return 0;
@@ -625,7 +620,7 @@ send_packet(const struct interface *iface, struct in_addr to,
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = to.s_addr;
sin.sin_port = htons(DHCP_SERVER_PORT);
- return sendto(iface->state->udp_fd, data, len, 0,
+ return sendto(D_CSTATE(iface)->udp_fd, data, len, 0,
(struct sockaddr *)&sin, sizeof(sin));
}