Lines Matching refs:state
196 static dhcpc_state_t *state;
509 ret = setenv("interface", state->iface, 1);
580 state->mode = MODE_OFF;
583 if (state->sockfd > 0) close(state->sockfd);
584 dbg("Opening raw socket on ifindex %d\n", state->ifindex);
586 state->sockfd = socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_IP));
587 if (state->sockfd < 0) {
588 dbg("MODE RAW : socket fail ERROR : %d\n", state->sockfd);
591 dbg("Got raw socket fd %d\n", state->sockfd);
595 sock.sll_ifindex = state->ifindex;
597 if (bind(state->sockfd, (struct sockaddr *) &sock, sizeof(sock))) {
599 close(state->sockfd);
602 state->mode = MODE_RAW;
603 if (setsockopt(state->sockfd, SOL_SOCKET, SO_ATTACH_FILTER, &filter_prog, sizeof(filter_prog)) < 0)
616 state->mode = MODE_OFF;
617 if (state->sockfd > 0) close(state->sockfd);
619 dbg("Opening listen socket on *:%d %s\n", DHCPC_CLIENT_PORT, state->iface);
620 state->sockfd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
621 if (state->sockfd < 0) {
622 dbg("MODE APP : socket fail ERROR: %d\n", state->sockfd);
625 setsockopt(state->sockfd, SOL_SOCKET, SO_REUSEADDR, &set, sizeof(set));
626 if (setsockopt(state->sockfd, SOL_SOCKET, SO_BROADCAST, &set, sizeof(set)) == -1) {
628 close(state->sockfd);
631 xstrncpy(ifr.ifr_name, state->iface, IFNAMSIZ);
633 setsockopt(state->sockfd, SOL_SOCKET, SO_BINDTODEVICE, &ifr, sizeof(ifr));
640 if (bind(state->sockfd, (struct sockaddr *) &addr, sizeof(addr))) {
641 close(state->sockfd);
645 state->mode = MODE_APP;
656 if ((bytes = read(state->sockfd, &packet, sizeof(packet))) < 0) {
694 memcpy(&state->pdhcp, &packet.dhcp, bytes - (sizeof(packet.iph) + sizeof(packet.udph)));
695 if (state->pdhcp.cookie != htonl(DHCP_MAGIC)) {
706 memset(&state->pdhcp, 0, sizeof(dhcp_msg_t));
707 if ((ret = read(state->sockfd, &state->pdhcp, sizeof(dhcp_msg_t))) < 0) {
711 if (state->pdhcp.cookie != htonl(DHCP_MAGIC)) {
727 memcpy(&packet.dhcp, &state->pdhcp, sizeof(dhcp_msg_t));
736 dest_sll.sll_ifindex = state->ifindex;
745 padding = 308 - 1 - dhcp_opt_size(state->pdhcp.options);
783 cli.sin_addr.s_addr = state->pdhcp.ciaddr;
791 cli.sin_addr.s_addr = state->serverid.s_addr;
796 int padding = 308 - 1 - dhcp_opt_size(state->pdhcp.options);
797 if((ret = write(fd, &state->pdhcp, sizeof(dhcp_msg_t) - padding)) < 0) {
838 memcpy(optptr, &state->macaddr, 6);
953 state->serverid.s_addr = var;
954 presult->serverid.s_addr = state->serverid.s_addr;
992 memset(&state->pdhcp, 0, sizeof(dhcp_msg_t));
993 state->pdhcp.op = DHCP_REQUEST;
994 state->pdhcp.htype = DHCP_HTYPE_ETHERNET;
995 state->pdhcp.hlen = 6;
996 state->pdhcp.xid = xid;
997 memcpy(state->pdhcp.chaddr, state->macaddr, 6);
998 memset(&state->pdhcp.chaddr[6], 0, 10);
999 state->pdhcp.cookie = htonl(DHCP_MAGIC);;
1002 pend = state->pdhcp.options;
1009 state->pdhcp.flags = htons(BOOTP_BROADCAST); // Broadcast bit.
1024 state->pdhcp.flags = htons(BOOTP_BROADCAST); // Broadcast bit.
1025 if (state->status == STATE_RENEWING) memcpy(&state->pdhcp.ciaddr, &state->ipaddr.s_addr, 4);
1029 pend = dhcpc_addreqipaddr(&state->ipaddr, pend);
1039 memcpy(&state->pdhcp.ciaddr, &state->ipaddr.s_addr, 4);
1048 if (state->mode == MODE_APP) return send_app();
1200 if (state->pdhcp.op == DHCP_REPLY
1201 && !memcmp(state->pdhcp.chaddr, state->macaddr, 6)
1202 && !memcmp(&state->pdhcp.xid, &xid, sizeof(xid))) {
1203 memcpy(&presult->ipaddr.s_addr, &state->pdhcp.yiaddr, 4);
1205 return get_option_msgtype(state->pdhcp.options);
1214 switch (state->status) {
1221 state->status = STATE_RENEW_REQUESTED;
1228 state->status = STATE_INIT;
1242 if (state->status == STATE_BOUND || state->status == STATE_RENEWING || state->status == STATE_REBINDING) {
1245 temp_addr.s_addr = state->ipaddr.s_addr;
1250 infomsg(infomode, "Entering released state");
1251 close(state->sockfd);
1252 state->sockfd = -1;
1253 state->mode = MODE_OFF;
1254 state->status = STATE_RELEASED;
1303 state = (dhcpc_state_t*) xmalloc(sizeof(dhcpc_state_t));
1304 memset(state, 0, sizeof(dhcpc_state_t));
1305 state->iface = (toys.optflags & FLAG_i) ? TT.iface : "eth0";
1307 if (get_interface(state->iface, &state->ifindex, NULL, state->macaddr))
1308 perror_exit("Failed to get interface %s", state->iface);
1312 state->status = STATE_INIT;
1314 fcntl(state->sockfd, F_SETFD, FD_CLOEXEC);
1318 if (state->sockfd >= 0) FD_SET(state->sockfd, &rfds);
1324 int maxfd = (sigfd.rd > state->sockfd)? sigfd.rd : state->sockfd;
1335 if (get_interface(state->iface, &state->ifindex, NULL, state->macaddr))
1336 error_exit("Interface lost %s\n", state->iface);
1338 switch (state->status) {
1370 memcpy(&state->ipaddr.s_addr,&state->pdhcp.yiaddr, 4);
1380 state->status = STATE_INIT;
1383 state->status = STATE_RENEWING;
1384 dbg("Entering renew state\n");
1395 dbg("Entering rebinding state\n");
1396 state->status = STATE_REBINDING;
1406 infomsg(infomode, "Lease lost, entering INIT state");
1408 state->status = STATE_INIT;
1431 if (state->status == STATE_RENEW_REQUESTED) goto renew_requested;
1432 if (state->status == STATE_INIT) timeout = 0;
1448 if (FD_ISSET(state->sockfd, &rfds)) { // Some Activity on RDFDs : is socket
1451 if (state->mode == MODE_RAW) bufflen = read_raw();
1452 if (state->mode == MODE_APP) bufflen = read_app();
1454 if (state->mode == MODE_RAW) mode_raw();
1455 if (state->mode == MODE_APP) mode_app();
1462 if (!msgType || !get_option_serverid(state->pdhcp.options, &result)) continue; //no server id ignore
1465 dhcpc_parseoptions(&result, state->pdhcp.options);
1466 get_option_lease(state->pdhcp.options, &result);
1468 switch (state->status) {
1471 state->status = STATE_REQUESTING;
1484 run_script(&result, state->status == STATE_REQUESTING ? "bound" : "renew");
1485 state->status = STATE_BOUND;
1505 if (state->status != STATE_REQUESTING) run_script(NULL, "deconfig");
1508 state->status = STATE_INIT;
1509 state->ipaddr.s_addr = 0;
1523 if (state->sockfd > 0) close(state->sockfd);
1524 free(state);