Lines Matching refs:dsmp

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