Lines Matching refs:dsmp
63 send_v6_request(dhcp_smach_t *dsmp) in send_v6_request() argument
68 dpkt = init_pkt(dsmp, DHCPV6_MSG_REQUEST); in send_v6_request()
69 (void) add_pkt_opt(dpkt, DHCPV6_OPT_SERVERID, dsmp->dsm_serverid, in send_v6_request()
70 dsmp->dsm_serveridlen); in send_v6_request()
73 d6in.d6in_iaid = htonl(dsmp->dsm_lif->lif_iaid); in send_v6_request()
81 (void) add_pkt_prl(dpkt, dsmp); in send_v6_request()
83 (void) send_pkt_v6(dsmp, dpkt, dsmp->dsm_server, stop_requesting, in send_v6_request()
87 (void) set_smach_state(dsmp, REQUESTING); in send_v6_request()
101 server_unicast_option(dhcp_smach_t *dsmp, PKT_LIST *plp) in server_unicast_option() argument
111 } else if (olen != sizeof (dsmp->dsm_server)) { in server_unicast_option()
130 dsmp->dsm_server = addr; in server_unicast_option()
151 dhcp_smach_t *dsmp = arg; in dhcp_requesting() local
155 boolean_t isv6 = dsmp->dsm_isv6; in dhcp_requesting()
165 isv6 ? 6 : 4, dsmp->dsm_name); in dhcp_requesting()
166 dsmp->dsm_offer_timer = -1; in dhcp_requesting()
167 if (!verify_smach(dsmp)) in dhcp_requesting()
170 cancel_offer_timer(dsmp); in dhcp_requesting()
177 offer = select_best(dsmp); in dhcp_requesting()
182 dsmp->dsm_name); in dhcp_requesting()
189 if ((dsmp->dsm_offer_timer = iu_schedule_timer(tq, in dhcp_requesting()
190 dsmp->dsm_offer_wait, dhcp_requesting, dsmp)) == -1) { in dhcp_requesting()
200 "%s", dsmp->dsm_name); in dhcp_requesting()
202 stop_pkt_retransmission(dsmp); in dhcp_requesting()
203 (void) set_smach_state(dsmp, INIT); in dhcp_requesting()
204 dsmp->dsm_dflags |= DHCP_IF_FAILED; in dhcp_requesting()
205 ipc_action_finish(dsmp, DHCP_IPC_E_MEMORY); in dhcp_requesting()
207 hold_smach(dsmp); in dhcp_requesting()
221 free_pkt_list(&dsmp->dsm_recv_pkt_list); in dhcp_requesting()
225 stop_pkt_retransmission(dsmp); in dhcp_requesting()
232 free_pkt_list(&dsmp->dsm_recv_pkt_list); in dhcp_requesting()
234 if (!set_smach_state(dsmp, REQUESTING)) { in dhcp_requesting()
235 dhcp_restart(dsmp); in dhcp_requesting()
239 if (!dhcp_bound(dsmp, offer)) { in dhcp_requesting()
241 "failed for %s", dsmp->dsm_name); in dhcp_requesting()
242 dhcp_restart(dsmp); in dhcp_requesting()
249 save_domainname(dsmp, offer); in dhcp_requesting()
260 print_server_msg(dsmp, msg, msglen); in dhcp_requesting()
263 if (!save_server_id(dsmp, offer)) in dhcp_requesting()
271 server_unicast_option(dsmp, offer); in dhcp_requesting()
273 send_v6_request(dsmp); in dhcp_requesting()
277 print_server_msg(dsmp, in dhcp_requesting()
287 dpkt = init_pkt(dsmp, REQUEST); in dhcp_requesting()
301 htons(dsmp->dsm_lif->lif_max - sizeof (struct udpiphdr))); in dhcp_requesting()
312 (void) add_pkt_prl(dpkt, dsmp); in dhcp_requesting()
319 if (!dhcp_add_fqdn_opt(dpkt, dsmp) && in dhcp_requesting()
320 dsmp->dsm_reqhost != NULL) { in dhcp_requesting()
321 (void) add_pkt_opt(dpkt, CD_HOSTNAME, dsmp->dsm_reqhost, in dhcp_requesting()
322 strlen(dsmp->dsm_reqhost)); in dhcp_requesting()
331 if (!set_smach_state(dsmp, REQUESTING)) { in dhcp_requesting()
334 dsmp->dsm_name); in dhcp_requesting()
338 (void) send_pkt(dsmp, dpkt, htonl(INADDR_BROADCAST), in dhcp_requesting()
348 dsmp->dsm_dflags |= DHCP_IF_FAILED; in dhcp_requesting()
349 (void) set_smach_state(dsmp, INIT); in dhcp_requesting()
350 ipc_action_finish(dsmp, DHCP_IPC_E_MEMORY); in dhcp_requesting()
351 free_pkt_list(&dsmp->dsm_recv_pkt_list); in dhcp_requesting()
364 compute_points_v6(const PKT_LIST *pkt, const dhcp_smach_t *dsmp) in compute_points_v6() argument
396 abuf, sizeof (abuf)), dsmp->dsm_name); in compute_points_v6()
433 for (i = 0; i < dsmp->dsm_prllen; i++) { in compute_points_v6()
434 if (dhcpv6_pkt_option(pkt, NULL, dsmp->dsm_prl[i], NULL) != in compute_points_v6()
536 select_best(dhcp_smach_t *dsmp) in select_best() argument
538 PKT_LIST *current = dsmp->dsm_recv_pkt_list; in select_best()
560 compute_points_v6(current, dsmp) : in select_best()
610 accept_v4_acknak(dhcp_smach_t *dsmp, PKT_LIST *plp) in accept_v4_acknak() argument
613 dsmp->dsm_received++; in accept_v4_acknak()
616 if (dsmp->dsm_state != INFORM_SENT && in accept_v4_acknak()
617 dsmp->dsm_state != INFORMATION && in accept_v4_acknak()
622 dsmp->dsm_name); in accept_v4_acknak()
623 dsmp->dsm_bad_offers++; in accept_v4_acknak()
627 if ((dsmp->dsm_state == RENEWING || in accept_v4_acknak()
628 dsmp->dsm_state == REBINDING) && in accept_v4_acknak()
629 dsmp->dsm_leases->dl_lifs->lif_addr != in accept_v4_acknak()
634 dsmp->dsm_bad_offers++; in accept_v4_acknak()
645 stop_pkt_retransmission(dsmp); in accept_v4_acknak()
649 dsmp->dsm_name); in accept_v4_acknak()
650 dsmp->dsm_bad_offers++; in accept_v4_acknak()
652 dhcp_restart(dsmp); in accept_v4_acknak()
660 (void) remove_hostconf(dsmp->dsm_name, dsmp->dsm_isv6); in accept_v4_acknak()
667 "server id on %s", dsmp->dsm_name); in accept_v4_acknak()
668 dsmp->dsm_bad_offers++; in accept_v4_acknak()
670 dhcp_restart(dsmp); in accept_v4_acknak()
675 print_server_msg(dsmp, (char *)plp->opts[CD_MESSAGE]->value, in accept_v4_acknak()
679 dhcpmsg(MSG_VERBOSE, "accept_v4_acknak: ACK on %s", dsmp->dsm_name); in accept_v4_acknak()
680 if (!dhcp_bound(dsmp, plp)) { in accept_v4_acknak()
682 "for %s", dsmp->dsm_name); in accept_v4_acknak()
683 dhcp_restart(dsmp); in accept_v4_acknak()
699 accept_v6_message(dhcp_smach_t *dsmp, PKT_LIST *plp, const char *pname, in accept_v6_message() argument
709 dsmp->dsm_received++; in accept_v6_message()
714 "on %s", dsmp->dsm_name); in accept_v6_message()
724 if (d6o == NULL || olen != dsmp->dsm_cidlen || in accept_v6_message()
725 memcmp(d6o + 1, dsmp->dsm_cid, olen) != 0) { in accept_v6_message()
728 pname, dsmp->dsm_name, d6o == NULL ? "no" : "wrong"); in accept_v6_message()
748 pname, dsmp->dsm_name); in accept_v6_message()
752 if (recv_type == DHCPV6_MSG_REPLY && dsmp->dsm_state != SELECTING && in accept_v6_message()
753 dsmp->dsm_state != INIT_REBOOT && dsmp->dsm_state != REBINDING && in accept_v6_message()
754 dsmp->dsm_state != INFORM_SENT) { in accept_v6_message()
756 if (olen != dsmp->dsm_serveridlen || in accept_v6_message()
757 memcmp(d6o + 1, dsmp->dsm_serverid, olen) != 0) { in accept_v6_message()
759 "%s: wrong Server ID", pname, dsmp->dsm_name); in accept_v6_message()
770 switch (dsmp->dsm_state) { in accept_v6_message()
778 dsmp->dsm_name); in accept_v6_message()
783 dsmp->dsm_name); in accept_v6_message()
784 cancel_offer_timer(dsmp); in accept_v6_message()
800 pkt_smach_enqueue(dsmp, plp); in accept_v6_message()
802 " immediate Request on %s", dsmp->dsm_name); in accept_v6_message()
803 dhcp_requesting(NULL, dsmp); in accept_v6_message()
805 pkt_smach_enqueue(dsmp, plp); in accept_v6_message()
829 dsmp->dsm_name); in accept_v6_message()
848 &dsmp->dsm_send_dest.v6.sin6_addr)) { in accept_v6_message()
852 dsmp->dsm_send_dest.v6.sin6_addr = in accept_v6_message()
854 retransmit_now(dsmp); in accept_v6_message()
858 print_server_msg(dsmp, msg, msglen); in accept_v6_message()
868 if (dhcp_bound(dsmp, plp)) { in accept_v6_message()
873 server_unicast_option(dsmp, plp); in accept_v6_message()
875 stop_pkt_retransmission(dsmp); in accept_v6_message()
877 "dhcp_bound failed for %s", dsmp->dsm_name); in accept_v6_message()
878 (void) remove_hostconf(dsmp->dsm_name, in accept_v6_message()
879 dsmp->dsm_isv6); in accept_v6_message()
880 dhcp_restart(dsmp); in accept_v6_message()
885 stop_pkt_retransmission(dsmp); in accept_v6_message()
887 if (dsmp->dsm_state == INFORM_SENT) { in accept_v6_message()
888 (void) set_smach_state(dsmp, INIT); in accept_v6_message()
889 ipc_action_finish(dsmp, DHCP_IPC_E_SRVFAILED); in accept_v6_message()
891 (void) remove_hostconf(dsmp->dsm_name, in accept_v6_message()
892 dsmp->dsm_isv6); in accept_v6_message()
893 request_failed(dsmp); in accept_v6_message()
904 stop_pkt_retransmission(dsmp); in accept_v6_message()
913 print_server_msg(dsmp, msg, msglen); in accept_v6_message()
919 if (dsmp->dsm_leases == NULL) { in accept_v6_message()
921 "leases left", dsmp->dsm_name); in accept_v6_message()
922 dhcp_restart(dsmp); in accept_v6_message()
923 } else if (dsmp->dsm_lif_wait == 0) { in accept_v6_message()
924 (void) set_smach_state(dsmp, BOUND); in accept_v6_message()
926 (void) set_smach_state(dsmp, PRE_BOUND); in accept_v6_message()
936 stop_pkt_retransmission(dsmp); in accept_v6_message()
944 print_server_msg(dsmp, msg, msglen); in accept_v6_message()
950 finished_smach(dsmp, DHCP_IPC_SUCCESS); in accept_v6_message()
959 pname, dsmp->dsm_name, dhcp_state_to_string(dsmp->dsm_state)); in accept_v6_message()
986 dhcp_smach_t *dsmp; in dhcp_acknak_global() local
1010 for (dsmp = lookup_smach_by_xid(xid, NULL, isv6); dsmp != NULL; in dhcp_acknak_global()
1011 dsmp = lookup_smach_by_xid(xid, dsmp, isv6)) { in dhcp_acknak_global()
1012 pif = dsmp->dsm_lif->lif_pif; in dhcp_acknak_global()
1018 if (dsmp == NULL) { in dhcp_acknak_global()
1037 sock = dsmp->dsm_lif->lif_sock_ip_fd; in dhcp_acknak_global()
1051 accept_v6_message(dsmp, plp, pname, recv_type); in dhcp_acknak_global()
1053 accept_v4_acknak(dsmp, plp); in dhcp_acknak_global()
1071 request_failed(dhcp_smach_t *dsmp) in request_failed() argument
1075 dsmp->dsm_server = ipv6_all_dhcp_relay_and_servers; in request_failed()
1076 if ((offer = select_best(dsmp)) != NULL) { in request_failed()
1077 insque(offer, &dsmp->dsm_recv_pkt_list); in request_failed()
1078 dhcp_requesting(NULL, dsmp); in request_failed()
1081 dsmp->dsm_name); in request_failed()
1082 dhcp_selecting(dsmp); in request_failed()
1108 dhcp_smach_t *dsmp; in dhcp_packet_lif() local
1128 for (dsmp = lookup_smach_by_xid(xid, NULL, B_FALSE); dsmp != NULL; in dhcp_packet_lif()
1129 dsmp = lookup_smach_by_xid(xid, dsmp, B_FALSE)) { in dhcp_packet_lif()
1130 if (dsmp->dsm_lif == lif) in dhcp_packet_lif()
1134 if (dsmp == NULL) in dhcp_packet_lif()
1142 accept_v4_acknak(dsmp, plp); in dhcp_packet_lif()
1144 if (is_bound_state(dsmp->dsm_state)) in dhcp_packet_lif()
1150 pkt_smach_enqueue(dsmp, plp); in dhcp_packet_lif()
1156 dsmp == NULL ? "unknown state machine" : "bound"); in dhcp_packet_lif()
1170 dhcp_restart(dhcp_smach_t *dsmp) in dhcp_restart() argument
1172 if (dsmp->dsm_state == INFORM_SENT || dsmp->dsm_state == INFORMATION) in dhcp_restart()
1183 deprecate_leases(dsmp); in dhcp_restart()
1185 if (!set_start_timer(dsmp)) { in dhcp_restart()
1187 "reverting to INIT state on %s", dsmp->dsm_name); in dhcp_restart()
1189 (void) set_smach_state(dsmp, INIT); in dhcp_restart()
1190 dsmp->dsm_dflags |= DHCP_IF_FAILED; in dhcp_restart()
1191 ipc_action_finish(dsmp, DHCP_IPC_E_MEMORY); in dhcp_restart()
1194 dsmp->dsm_name); in dhcp_restart()
1207 stop_requesting(dhcp_smach_t *dsmp, unsigned int n_requests) in stop_requesting() argument
1211 maxreq = dsmp->dsm_isv6 ? DHCPV6_REQ_MAX_RC : DHCP_MAX_REQUESTS; in stop_requesting()
1215 dsmp->dsm_name); in stop_requesting()
1217 request_failed(dsmp); in stop_requesting()