Lines Matching refs:dsmp

62 send_v6_request(dhcp_smach_t *dsmp)  in send_v6_request()  argument
67 dpkt = init_pkt(dsmp, DHCPV6_MSG_REQUEST); in send_v6_request()
68 (void) add_pkt_opt(dpkt, DHCPV6_OPT_SERVERID, dsmp->dsm_serverid, in send_v6_request()
69 dsmp->dsm_serveridlen); in send_v6_request()
72 d6in.d6in_iaid = htonl(dsmp->dsm_lif->lif_iaid); in send_v6_request()
80 (void) add_pkt_prl(dpkt, dsmp); in send_v6_request()
82 (void) send_pkt_v6(dsmp, dpkt, dsmp->dsm_server, stop_requesting, in send_v6_request()
86 (void) set_smach_state(dsmp, REQUESTING); in send_v6_request()
100 server_unicast_option(dhcp_smach_t *dsmp, PKT_LIST *plp) in server_unicast_option() argument
110 } else if (olen != sizeof (dsmp->dsm_server)) { in server_unicast_option()
129 dsmp->dsm_server = addr; in server_unicast_option()
150 dhcp_smach_t *dsmp = arg; in dhcp_requesting() local
154 boolean_t isv6 = dsmp->dsm_isv6; in dhcp_requesting()
164 isv6 ? 6 : 4, dsmp->dsm_name); in dhcp_requesting()
165 dsmp->dsm_offer_timer = -1; in dhcp_requesting()
166 if (!verify_smach(dsmp)) in dhcp_requesting()
169 cancel_offer_timer(dsmp); in dhcp_requesting()
176 offer = select_best(dsmp); in dhcp_requesting()
181 dsmp->dsm_name); in dhcp_requesting()
188 if ((dsmp->dsm_offer_timer = iu_schedule_timer(tq, in dhcp_requesting()
189 dsmp->dsm_offer_wait, dhcp_requesting, dsmp)) == -1) { in dhcp_requesting()
199 "%s", dsmp->dsm_name); in dhcp_requesting()
201 stop_pkt_retransmission(dsmp); in dhcp_requesting()
202 (void) set_smach_state(dsmp, INIT); in dhcp_requesting()
203 dsmp->dsm_dflags |= DHCP_IF_FAILED; in dhcp_requesting()
204 ipc_action_finish(dsmp, DHCP_IPC_E_MEMORY); in dhcp_requesting()
206 hold_smach(dsmp); in dhcp_requesting()
220 free_pkt_list(&dsmp->dsm_recv_pkt_list); in dhcp_requesting()
224 stop_pkt_retransmission(dsmp); in dhcp_requesting()
231 free_pkt_list(&dsmp->dsm_recv_pkt_list); in dhcp_requesting()
233 if (!set_smach_state(dsmp, REQUESTING)) { in dhcp_requesting()
234 dhcp_restart(dsmp); in dhcp_requesting()
238 if (!dhcp_bound(dsmp, offer)) { in dhcp_requesting()
240 "failed for %s", dsmp->dsm_name); in dhcp_requesting()
241 dhcp_restart(dsmp); in dhcp_requesting()
257 print_server_msg(dsmp, msg, msglen); in dhcp_requesting()
260 if (!save_server_id(dsmp, offer)) in dhcp_requesting()
268 server_unicast_option(dsmp, offer); in dhcp_requesting()
270 send_v6_request(dsmp); in dhcp_requesting()
274 print_server_msg(dsmp, in dhcp_requesting()
284 dpkt = init_pkt(dsmp, REQUEST); in dhcp_requesting()
298 htons(dsmp->dsm_lif->lif_max - sizeof (struct udpiphdr))); in dhcp_requesting()
309 (void) add_pkt_prl(dpkt, dsmp); in dhcp_requesting()
316 if (dsmp->dsm_reqhost != NULL) { in dhcp_requesting()
317 (void) add_pkt_opt(dpkt, CD_HOSTNAME, dsmp->dsm_reqhost, in dhcp_requesting()
318 strlen(dsmp->dsm_reqhost)); in dhcp_requesting()
327 if (!set_smach_state(dsmp, REQUESTING)) { in dhcp_requesting()
330 dsmp->dsm_name); in dhcp_requesting()
334 (void) send_pkt(dsmp, dpkt, htonl(INADDR_BROADCAST), in dhcp_requesting()
344 dsmp->dsm_dflags |= DHCP_IF_FAILED; in dhcp_requesting()
345 (void) set_smach_state(dsmp, INIT); in dhcp_requesting()
346 ipc_action_finish(dsmp, DHCP_IPC_E_MEMORY); in dhcp_requesting()
347 free_pkt_list(&dsmp->dsm_recv_pkt_list); in dhcp_requesting()
360 compute_points_v6(const PKT_LIST *pkt, const dhcp_smach_t *dsmp) in compute_points_v6() argument
392 abuf, sizeof (abuf)), dsmp->dsm_name); in compute_points_v6()
429 for (i = 0; i < dsmp->dsm_prllen; i++) { in compute_points_v6()
430 if (dhcpv6_pkt_option(pkt, NULL, dsmp->dsm_prl[i], NULL) != in compute_points_v6()
532 select_best(dhcp_smach_t *dsmp) in select_best() argument
534 PKT_LIST *current = dsmp->dsm_recv_pkt_list; in select_best()
556 compute_points_v6(current, dsmp) : in select_best()
606 accept_v4_acknak(dhcp_smach_t *dsmp, PKT_LIST *plp) in accept_v4_acknak() argument
609 dsmp->dsm_received++; in accept_v4_acknak()
612 if (dsmp->dsm_state != INFORM_SENT && in accept_v4_acknak()
613 dsmp->dsm_state != INFORMATION && in accept_v4_acknak()
618 dsmp->dsm_name); in accept_v4_acknak()
619 dsmp->dsm_bad_offers++; in accept_v4_acknak()
623 if ((dsmp->dsm_state == RENEWING || in accept_v4_acknak()
624 dsmp->dsm_state == REBINDING) && in accept_v4_acknak()
625 dsmp->dsm_leases->dl_lifs->lif_addr != in accept_v4_acknak()
630 dsmp->dsm_bad_offers++; in accept_v4_acknak()
641 stop_pkt_retransmission(dsmp); in accept_v4_acknak()
645 dsmp->dsm_name); in accept_v4_acknak()
646 dsmp->dsm_bad_offers++; in accept_v4_acknak()
648 dhcp_restart(dsmp); in accept_v4_acknak()
656 (void) remove_hostconf(dsmp->dsm_name, dsmp->dsm_isv6); in accept_v4_acknak()
663 "server id on %s", dsmp->dsm_name); in accept_v4_acknak()
664 dsmp->dsm_bad_offers++; in accept_v4_acknak()
666 dhcp_restart(dsmp); in accept_v4_acknak()
671 print_server_msg(dsmp, (char *)plp->opts[CD_MESSAGE]->value, in accept_v4_acknak()
675 dhcpmsg(MSG_VERBOSE, "accept_v4_acknak: ACK on %s", dsmp->dsm_name); in accept_v4_acknak()
676 if (!dhcp_bound(dsmp, plp)) { in accept_v4_acknak()
678 "for %s", dsmp->dsm_name); in accept_v4_acknak()
679 dhcp_restart(dsmp); in accept_v4_acknak()
695 accept_v6_message(dhcp_smach_t *dsmp, PKT_LIST *plp, const char *pname, in accept_v6_message() argument
705 dsmp->dsm_received++; in accept_v6_message()
710 "on %s", dsmp->dsm_name); in accept_v6_message()
720 if (d6o == NULL || olen != dsmp->dsm_cidlen || in accept_v6_message()
721 memcmp(d6o + 1, dsmp->dsm_cid, olen) != 0) { in accept_v6_message()
724 pname, dsmp->dsm_name, d6o == NULL ? "no" : "wrong"); in accept_v6_message()
744 pname, dsmp->dsm_name); in accept_v6_message()
748 if (recv_type == DHCPV6_MSG_REPLY && dsmp->dsm_state != SELECTING && in accept_v6_message()
749 dsmp->dsm_state != INIT_REBOOT && dsmp->dsm_state != REBINDING && in accept_v6_message()
750 dsmp->dsm_state != INFORM_SENT) { in accept_v6_message()
752 if (olen != dsmp->dsm_serveridlen || in accept_v6_message()
753 memcmp(d6o + 1, dsmp->dsm_serverid, olen) != 0) { in accept_v6_message()
755 "%s: wrong Server ID", pname, dsmp->dsm_name); in accept_v6_message()
766 switch (dsmp->dsm_state) { in accept_v6_message()
774 dsmp->dsm_name); in accept_v6_message()
779 dsmp->dsm_name); in accept_v6_message()
780 cancel_offer_timer(dsmp); in accept_v6_message()
796 pkt_smach_enqueue(dsmp, plp); in accept_v6_message()
798 " immediate Request on %s", dsmp->dsm_name); in accept_v6_message()
799 dhcp_requesting(NULL, dsmp); in accept_v6_message()
801 pkt_smach_enqueue(dsmp, plp); in accept_v6_message()
825 dsmp->dsm_name); in accept_v6_message()
844 &dsmp->dsm_send_dest.v6.sin6_addr)) { in accept_v6_message()
848 dsmp->dsm_send_dest.v6.sin6_addr = in accept_v6_message()
850 retransmit_now(dsmp); in accept_v6_message()
854 print_server_msg(dsmp, msg, msglen); in accept_v6_message()
864 if (dhcp_bound(dsmp, plp)) { in accept_v6_message()
869 server_unicast_option(dsmp, plp); in accept_v6_message()
871 stop_pkt_retransmission(dsmp); in accept_v6_message()
873 "dhcp_bound failed for %s", dsmp->dsm_name); in accept_v6_message()
874 (void) remove_hostconf(dsmp->dsm_name, in accept_v6_message()
875 dsmp->dsm_isv6); in accept_v6_message()
876 dhcp_restart(dsmp); in accept_v6_message()
881 stop_pkt_retransmission(dsmp); in accept_v6_message()
883 if (dsmp->dsm_state == INFORM_SENT) { in accept_v6_message()
884 (void) set_smach_state(dsmp, INIT); in accept_v6_message()
885 ipc_action_finish(dsmp, DHCP_IPC_E_SRVFAILED); in accept_v6_message()
887 (void) remove_hostconf(dsmp->dsm_name, in accept_v6_message()
888 dsmp->dsm_isv6); in accept_v6_message()
889 request_failed(dsmp); in accept_v6_message()
900 stop_pkt_retransmission(dsmp); in accept_v6_message()
909 print_server_msg(dsmp, msg, msglen); in accept_v6_message()
915 if (dsmp->dsm_leases == NULL) { in accept_v6_message()
917 "leases left", dsmp->dsm_name); in accept_v6_message()
918 dhcp_restart(dsmp); in accept_v6_message()
919 } else if (dsmp->dsm_lif_wait == 0) { in accept_v6_message()
920 (void) set_smach_state(dsmp, BOUND); in accept_v6_message()
922 (void) set_smach_state(dsmp, PRE_BOUND); in accept_v6_message()
932 stop_pkt_retransmission(dsmp); in accept_v6_message()
940 print_server_msg(dsmp, msg, msglen); in accept_v6_message()
946 finished_smach(dsmp, DHCP_IPC_SUCCESS); in accept_v6_message()
955 pname, dsmp->dsm_name, dhcp_state_to_string(dsmp->dsm_state)); in accept_v6_message()
982 dhcp_smach_t *dsmp; in dhcp_acknak_global() local
1006 for (dsmp = lookup_smach_by_xid(xid, NULL, isv6); dsmp != NULL; in dhcp_acknak_global()
1007 dsmp = lookup_smach_by_xid(xid, dsmp, isv6)) { in dhcp_acknak_global()
1008 pif = dsmp->dsm_lif->lif_pif; in dhcp_acknak_global()
1014 if (dsmp == NULL) { in dhcp_acknak_global()
1033 sock = dsmp->dsm_lif->lif_sock_ip_fd; in dhcp_acknak_global()
1047 accept_v6_message(dsmp, plp, pname, recv_type); in dhcp_acknak_global()
1049 accept_v4_acknak(dsmp, plp); in dhcp_acknak_global()
1067 request_failed(dhcp_smach_t *dsmp) in request_failed() argument
1071 dsmp->dsm_server = ipv6_all_dhcp_relay_and_servers; in request_failed()
1072 if ((offer = select_best(dsmp)) != NULL) { in request_failed()
1073 insque(offer, &dsmp->dsm_recv_pkt_list); in request_failed()
1074 dhcp_requesting(NULL, dsmp); in request_failed()
1077 dsmp->dsm_name); in request_failed()
1078 dhcp_selecting(dsmp); in request_failed()
1104 dhcp_smach_t *dsmp; in dhcp_packet_lif() local
1124 for (dsmp = lookup_smach_by_xid(xid, NULL, B_FALSE); dsmp != NULL; in dhcp_packet_lif()
1125 dsmp = lookup_smach_by_xid(xid, dsmp, B_FALSE)) { in dhcp_packet_lif()
1126 if (dsmp->dsm_lif == lif) in dhcp_packet_lif()
1130 if (dsmp == NULL) in dhcp_packet_lif()
1138 accept_v4_acknak(dsmp, plp); in dhcp_packet_lif()
1140 if (is_bound_state(dsmp->dsm_state)) in dhcp_packet_lif()
1146 pkt_smach_enqueue(dsmp, plp); in dhcp_packet_lif()
1152 dsmp == NULL ? "unknown state machine" : "bound"); in dhcp_packet_lif()
1166 dhcp_restart(dhcp_smach_t *dsmp) in dhcp_restart() argument
1168 if (dsmp->dsm_state == INFORM_SENT || dsmp->dsm_state == INFORMATION) in dhcp_restart()
1179 deprecate_leases(dsmp); in dhcp_restart()
1181 if (!set_start_timer(dsmp)) { in dhcp_restart()
1183 "reverting to INIT state on %s", dsmp->dsm_name); in dhcp_restart()
1185 (void) set_smach_state(dsmp, INIT); in dhcp_restart()
1186 dsmp->dsm_dflags |= DHCP_IF_FAILED; in dhcp_restart()
1187 ipc_action_finish(dsmp, DHCP_IPC_E_MEMORY); in dhcp_restart()
1190 dsmp->dsm_name); in dhcp_restart()
1203 stop_requesting(dhcp_smach_t *dsmp, unsigned int n_requests) in stop_requesting() argument
1207 maxreq = dsmp->dsm_isv6 ? DHCPV6_REQ_MAX_RC : DHCP_MAX_REQUESTS; in stop_requesting()
1211 dsmp->dsm_name); in stop_requesting()
1213 request_failed(dsmp); in stop_requesting()