diff options
| author | Roy Marples <roy@marples.name> | 2013-02-03 22:55:45 +0000 |
|---|---|---|
| committer | Roy Marples <roy@marples.name> | 2013-02-03 22:55:45 +0000 |
| commit | 95fdd136aefd8926154175feb3bf6714549a50f5 (patch) | |
| tree | 1de01a78eda4297bda6ec1c06de6560b677e676c /net.c | |
| parent | 5dc65f77b304e1f55c036a7f14a4ed454e365ec6 (diff) | |
| download | dhcpcd-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.c | 17 |
1 files changed, 6 insertions, 11 deletions
@@ -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)); } |
