Lines Matching defs:pg

46 static void phyint_insert(struct phyint *pi, struct phyint_group *pg);
58 static void target_flush_hosts(struct phyint_group *pg);
65 static int phyint_state_event(struct phyint_group *pg, struct phyint *pi);
66 static int phyint_group_state_event(struct phyint_group *pg);
67 static int phyint_group_change_event(struct phyint_group *pg, ipmp_group_op_t);
68 static int phyint_group_member_event(struct phyint_group *pg, struct phyint *pi,
296 struct phyint_group *pg;
301 for (pg = phyint_groups; pg != NULL; pg = pg->pg_next) {
302 if (strncmp(pg->pg_name, pg_name, sizeof (pg->pg_name)) == 0)
305 return (pg);
313 phyint_insert(struct phyint *pi, struct phyint_group *pg)
316 logdebug("phyint_insert(%s '%s')\n", pi->pi_name, pg->pg_name);
331 pi->pi_group = pg;
333 pi->pi_pgnext = pg->pg_phyint;
336 pg->pg_phyint = pi;
339 phyint_group_refresh_state(pg);
341 pg->pg_sig++;
342 (void) phyint_group_member_event(pg, pi, IPMP_IF_ADD);
370 phyint_create(char *pi_name, struct phyint_group *pg, uint_t ifindex,
410 phyint_insert(pi, pg);
489 phyint_group_insert(struct phyint_group *pg)
491 pg->pg_next = phyint_groups;
492 pg->pg_prev = NULL;
494 phyint_groups->pg_prev = pg;
495 phyint_groups = pg;
498 (void) phyint_group_change_event(pg, IPMP_GROUP_ADD);
507 struct phyint_group *pg;
512 pg = calloc(1, sizeof (struct phyint_group));
513 if (pg == NULL) {
518 (void) strlcpy(pg->pg_name, name, sizeof (pg->pg_name));
519 pg->pg_sig = gensig();
520 pg->pg_fdt = user_failure_detection_time;
521 pg->pg_probeint = user_probe_interval;
522 pg->pg_in_use = _B_TRUE;
529 pg->pg_state = (name[0] == '\0' ? PG_OK : PG_FAILED);
531 return (pg);
535 * Change the state of the phyint group `pg' to state `state'.
538 phyint_group_chstate(struct phyint_group *pg, enum pg_state state)
540 assert(pg != phyint_anongroup);
549 if (pg->pg_state == state)
552 pg->pg_state = state;
570 target_flush_hosts(pg);
583 pg->pg_sig++;
584 (void) phyint_group_state_event(pg);
606 struct phyint_group *pg;
611 pg = NULL;
699 if ((pg = phyint_group_lookup(pg_name)) == NULL) {
700 if ((pg = phyint_group_create(pg_name)) == NULL) {
705 phyint_group_insert(pg);
713 pi = phyint_create(pi_name, pg, ifindex, flags);
819 struct phyint_group *pg;
841 pg = pii->pii_phyint->pi_group;
842 if (pg == phyint_anongroup && !track_all_phyints) {
1098 phyint_group_delete(struct phyint_group *pg)
1103 if (pg == phyint_anongroup)
1107 logdebug("phyint_group_delete('%s')\n", pg->pg_name);
1113 assert(pg->pg_phyint == NULL);
1114 assert(phyint_groups == pg || pg->pg_prev != NULL);
1116 if (pg->pg_prev != NULL)
1117 pg->pg_prev->pg_next = pg->pg_next;
1119 phyint_groups = pg->pg_next;
1121 if (pg->pg_next != NULL)
1122 pg->pg_next->pg_prev = pg->pg_prev;
1124 pg->pg_next = NULL;
1125 pg->pg_prev = NULL;
1128 (void) phyint_group_change_event(pg, IPMP_GROUP_REMOVE);
1130 addrlist_free(&pg->pg_addrs);
1131 free(pg);
1135 * Refresh the state of `pg' based on its current members.
1138 phyint_group_refresh_state(struct phyint_group *pg)
1141 enum pg_state origstate = pg->pg_state;
1148 if (pg == phyint_anongroup)
1151 for (pi = pg->pg_phyint; pi != NULL; pi = pi->pi_pgnext) {
1166 phyint_group_chstate(pg, state);
1180 if (state != PG_FAILED && pg->pg_failmsg_printed) {
1183 "usable\n", usablepi->pi_name, pg->pg_name);
1184 pg->pg_failmsg_printed = _B_FALSE;
1187 pg->pg_name);
1188 pg->pg_failmsg_printed = _B_TRUE;
1331 struct phyint_group *pg = pi->pi_group;
1342 assert(pg->pg_phyint == pi || pi->pi_pgprev != NULL);
1348 pg->pg_sig++;
1349 (void) phyint_group_member_event(pg, pi, IPMP_IF_REMOVE);
1353 pg->pg_phyint = pi->pi_pgnext;
1363 phyint_group_refresh_state(pg);
1392 if (pg != phyint_anongroup) {
1394 for (pi2 = pg->pg_phyint; pi2 != NULL; pi2 = pi2->pi_pgnext) {
1421 struct phyint_group *pg = pi->pi_group;
1428 if (pg != phyint_anongroup) {
1429 for (pi2 = pg->pg_phyint; pi2 != NULL; pi2 = pi2->pi_pgnext) {
1433 (GROUP_FAILED(pg) && pi2->pi_state != PI_OFFLINE))
1466 pg->pg_name);
2511 target_flush_hosts(struct phyint_group *pg)
2517 logdebug("target_flush_hosts(%s)\n", pg->pg_name);
2519 for (pi = pg->pg_phyint; pi != NULL; pi = pi->pi_pgnext) {
2866 * Return the external IPMP group state associated with phyint group `pg'.
2869 groupstate(struct phyint_group *pg)
2871 switch (pg->pg_state) {
2880 logerr("groupstate: unknown state %d; aborting\n", pg->pg_state);
2988 * Generate an ESC_IPMP_GROUP_STATE sysevent for phyint group `pg'.
2992 phyint_group_state_event(struct phyint_group *pg)
3002 errno = nvlist_add_string(nvl, IPMP_GROUP_NAME, pg->pg_name);
3006 errno = nvlist_add_uint64(nvl, IPMP_GROUP_SIGNATURE, pg->pg_sig);
3010 errno = nvlist_add_uint32(nvl, IPMP_GROUP_STATE, groupstate(pg));
3023 * `pg'. Returns 0 on success, -1 on failure.
3026 phyint_group_change_event(struct phyint_group *pg, ipmp_group_op_t op)
3036 errno = nvlist_add_string(nvl, IPMP_GROUP_NAME, pg->pg_name);
3040 errno = nvlist_add_uint64(nvl, IPMP_GROUP_SIGNATURE, pg->pg_sig);
3062 * group `pg'. Returns 0 on success, -1 on failure.
3065 phyint_group_member_event(struct phyint_group *pg, struct phyint *pi,
3076 errno = nvlist_add_string(nvl, IPMP_GROUP_NAME, pg->pg_name);
3080 errno = nvlist_add_uint64(nvl, IPMP_GROUP_SIGNATURE, pg->pg_sig);
3109 * Generate an ESC_IPMP_IF_CHANGE sysevent for phyint `pi' in group `pg'.
3113 phyint_state_event(struct phyint_group *pg, struct phyint *pi)
3123 errno = nvlist_add_string(nvl, IPMP_GROUP_NAME, pg->pg_name);
3127 errno = nvlist_add_uint64(nvl, IPMP_GROUP_SIGNATURE, pg->pg_sig);
3179 struct phyint_group *pg;
3188 pg = phyint_group_lookup(grname);
3189 if (pg == NULL)
3197 for (pi = pg->pg_phyint; pi != NULL; pi = pi->pi_pgnext)
3201 for (i = 0, pi = pg->pg_phyint; pi != NULL; pi = pi->pi_pgnext, i++) {
3205 fdt = pg->pg_fdt;
3213 if (pg == phyint_anongroup) {
3214 *grinfopp = ipmp_groupinfo_create(pg->pg_name, pg->pg_sig, fdt,
3215 groupstate(pg), nif, ifs, "", "", "", "", 0, NULL);
3237 for (addrp = pg->pg_addrs; addrp != NULL; addrp = addrp->al_next)
3242 for (addrp = pg->pg_addrs; addrp != NULL; addrp = addrp->al_next) {
3260 *grinfopp = ipmp_groupinfo_create(pg->pg_name, pg->pg_sig, fdt,
3261 groupstate(pg), nif, ifs, lifgr.gi_grifname, lifgr.gi_m4ifname,
3340 struct phyint_group *pg;
3348 for (ngroup = 0, pg = phyint_groups; pg != NULL; pg = pg->pg_next)
3352 for (i = 0, pg = phyint_groups; pg != NULL; pg = pg->pg_next, i++) {
3354 (void) strlcpy(groups[i], pg->pg_name, LIFGRNAMSIZ);
3377 struct phyint_group *pg;
3379 if ((pg = phyint_group_lookup(grname)) == NULL)
3387 for (addrp = pg->pg_addrs; addrp != NULL; addrp = addrp->al_next) {
3406 *adinfopp = ipmp_addrinfo_create(ssp, state, pg->pg_name, binding);