static ib_api_status_t prtn_make_default(osm_log_t * p_log, osm_subn_t * p_subn, boolean_t no_config) { ib_api_status_t status = IB_UNKNOWN_ERROR; osm_prtn_t *p; p = osm_prtn_make_new(p_log, p_subn, "Default", IB_DEFAULT_PARTIAL_PKEY); if (!p) goto _err; status = osm_prtn_add_all(p_log, p_subn, p, 0, no_config, FALSE); if (status != IB_SUCCESS) goto _err; cl_map_remove(&p->part_guid_tbl, p_subn->sm_port_guid); status = osm_prtn_add_port(p_log, p_subn, p, p_subn->sm_port_guid, TRUE, FALSE); /* ipv4 broadcast group */ if (no_config) osm_prtn_add_mcgroup(p_log, p_subn, p, OSM_DEFAULT_MGRP_RATE, OSM_DEFAULT_MGRP_MTU, OSM_DEFAULT_SL, 0, OSM_IPOIB_BROADCAST_MGRP_QKEY, 0, 0, &osm_ipoib_broadcast_mgid); _err: return status; }
static int partition_create(unsigned lineno, struct part_conf *conf, char *name, char *id, char *flag, char *flag_val) { ib_net16_t pkey; if (!id && name && isdigit(*name)) { id = name; name = NULL; } if (id) { char *end; pkey = cl_hton16((uint16_t)strtoul(id, &end, 0)); if (end == id || *end) return -1; } else pkey = 0; conf->p_prtn = osm_prtn_make_new(conf->p_log, conf->p_subn, name, pkey); if (!conf->p_prtn) return -1; if (!conf->p_subn->opt.qos && conf->flags.sl != OSM_DEFAULT_SL) { OSM_LOG(conf->p_log, OSM_LOG_DEBUG, "Overriding SL %d" " to default SL %d on partition %s" " as QoS is not enabled.\n", conf->flags.sl, OSM_DEFAULT_SL, name); conf->flags.sl = OSM_DEFAULT_SL; } conf->p_prtn->sl = (uint8_t) conf->flags.sl; if (conf->is_ipoib) { struct precreate_mgroup broadcast_mgroup; memset(&broadcast_mgroup, 0, sizeof(broadcast_mgroup)); broadcast_mgroup.mgid = osm_ipoib_broadcast_mgid; pkey |= cl_hton16(0x8000); memcpy(&broadcast_mgroup.mgid.raw[4], &pkey , sizeof(pkey)); broadcast_mgroup.flags.mtu = conf->flags.mtu; broadcast_mgroup.flags.rate = conf->flags.rate; broadcast_mgroup.flags.sl = conf->flags.sl; broadcast_mgroup.flags.Q_Key = conf->flags.Q_Key ? conf->flags.Q_Key : OSM_IPOIB_BROADCAST_MGRP_QKEY; broadcast_mgroup.flags.TClass = conf->flags.TClass; broadcast_mgroup.flags.FlowLabel = conf->flags.FlowLabel; __create_mgrp(conf, &broadcast_mgroup); } return 0; }