Lines Matching defs:node

63 char *ibnd_get_chassis_type(ibnd_node_t * node)
67 if (!node) {
68 IBND_DEBUG("node parameter NULL\n");
72 if (!node->chassis)
75 chassis_type = mad_get_field(node->info, 0, IB_NODE_VENDORID_F);
81 if (node->ch_type == UNRESOLVED_CT || node->ch_type > ISR4200_CT)
83 return ChassisTypeStr[node->ch_type];
87 if (node->ch_type_str[0] == '\0')
89 return node->ch_type_str;
99 char *ibnd_get_chassis_slot_str(ibnd_node_t * node, char *str, size_t size)
103 if (!node) {
104 IBND_DEBUG("node parameter NULL\n");
109 vendor_id = mad_get_field(node->info, 0,IB_NODE_VENDORID_F);
113 if (!node->chassis)
115 if (node->ch_slot == UNRESOLVED_CS || node->ch_slot > SRBD_CS)
119 snprintf(str, size, "%s %d Chip %d", ChassisSlotTypeStr[node->ch_slot],
120 node->ch_slotnum, node->ch_anafanum);
193 static uint64_t xsigo_chassisguid(ibnd_node_t * node)
196 mad_get_field64(node->info, 0, IB_NODE_SYSTEM_GUID_F);
207 if (!node->ports || !node->ports[1])
211 if (!node->ports[1]->remoteport)
216 mad_get_field64(node->ports[1]->remoteport->node->info, 0,
225 static uint64_t get_chassisguid(ibnd_node_t * node)
227 uint32_t vendid = mad_get_field(node->info, 0, IB_NODE_VENDORID_F);
229 mad_get_field64(node->info, 0, IB_NODE_SYSTEM_GUID_F);
234 return xsigo_chassisguid(node);
240 ibnd_node_t * node)
245 chguid = get_chassisguid(node);
516 IBND_ERROR("Unexpected node found: guid 0x%016" PRIx64 "\n",
529 if (is_spine_9096(spineport->node)) {
533 } else if (is_spine_9288(spineport->node)) {
537 guessnum = spineport->node->guid % 4;
542 } else if (is_spine_2012(spineport->node)) {
546 guessnum = spineport->node->guid % 4;
551 } else if (is_spine_2004(spineport->node)) {
556 IBND_ERROR("Unexpected node found: guid 0x%016" PRIx64 "\n",
557 spineport->node->guid);
565 if (is_spine_9096(spineport->node)) {
569 } else if (is_spine_9288(spineport->node)) {
573 } else if (is_spine_2012(spineport->node)) {
577 } else if (is_spine_2004(spineport->node)) {
581 } else if (is_spine_4700(spineport->node)) {
585 } else if (is_spine_4700x2(spineport->node)) {
589 } else if (is_spine_4200(spineport->node)) {
594 IBND_ERROR("Unexpected node found: guid 0x%016" PRIx64 "\n",
595 spineport->node->guid);
602 This function called for every Mellanox node in fabric
604 static int fill_mellanox_chassis_record(ibnd_node_t * node)
618 The node description has the following format:
620 'MF0;<system name>:<system type>/<system slot name>[:board type]/U<node index>'
628 memcpy(node_desc, node->nodedesc, IB_SMP_DATA_SIZE);
632 if (node->ch_found) /* somehow this node has already been passed */
636 dev_id = mad_get_field(node->info, 0,IB_NODE_DEVID_F);
644 IBND_DEBUG("fill_mellanox_chassis_record: Unsupported node description format:%s \n",node_desc);
652 IBND_DEBUG("fill_mellanox_chassis_record: Unsupported node description format:%s - (get system_name failed) \n",node_desc);
661 IBND_DEBUG("fill_mellanox_chassis_record: Unsupported node description format:%s - (get system_type failed) \n",node_desc);
670 IBND_DEBUG("fill_mellanox_chassis_record: Unsupported node description format:%s - (get system_slot_name failed) \n",node_desc);
678 IBND_DEBUG("fill_mellanox_chassis_record: Unsupported node description format:%s - (get board type failed) \n",node_desc);
686 IBND_DEBUG("fill_mellanox_chassis_record: Unsupported node description format:%s - (get node index) \n",node_desc);
690 /* set Chip number (node index) */
691 node->ch_anafanum = (unsigned char) atoi(&node_index[1]);
692 if(node->ch_anafanum != 1){
693 IBND_DEBUG("Unexpected Chip number:%d \n",node->ch_anafanum);
699 node->ch_slot = LINE_CS;
701 node->ch_slot = SPINE_CS;
708 node->ch_found = 1;
710 node->ch_slotnum = (unsigned char) atoi(&system_slot_name[1]);
711 if((node->ch_slot == LINE_CS && (node->ch_slotnum > (LINES_MAX_NUM + 1))) ||
712 (node->ch_slot == SPINE_CS && (node->ch_slotnum > (SPINES_MAX_NUM + 1)))){
713 IBND_ERROR("fill_mellanox_chassis_record: invalid slot number:%d \n",node->ch_slotnum);
714 node->ch_slotnum = 0;
719 strncpy(node->ch_type_str , system_type, sizeof(node->ch_type_str)-1);
722 if(node->ch_slot == LINE_CS)
724 for (p = 1; p <= node->numports && p <= 18 ; p++) {
725 port = node->ports[p];
735 static int insert_mellanox_line_and_spine(ibnd_node_t * node, ibnd_chassis_t * chassis)
737 if (node->ch_slot == LINE_CS){
739 if (chassis->linenode[node->ch_slotnum])
742 chassis->linenode[node->ch_slotnum] = node;
744 else if (node->ch_slot == SPINE_CS){
746 if (chassis->spinenode[node->ch_slotnum])
749 chassis->spinenode[node->ch_slotnum] = node;
754 node->chassis = chassis;
763 This function called for every Voltaire node in fabric
767 static int fill_voltaire_chassis_record(ibnd_node_t * node)
773 if (node->ch_found) /* somehow this node has already been passed */
775 node->ch_found = 1;
777 /* node is router only in case of using unique lid */
779 /* in such case node->ports is actually a requested port... */
780 if (is_router(node))
781 /* find the remote node */
782 for (p = 1; p <= node->numports; p++) {
783 port = node->ports[p];
784 if (port && is_spine(port->remoteport->node))
785 get_router_slot(node, port->remoteport);
787 else if (is_spine(node)) {
788 int is_4700x2 = is_spine_4700x2(node);
790 for (p = 1; p <= node->numports; p++) {
791 port = node->ports[p];
802 remnode = port->remoteport->node;
808 if (!node->ch_type)
810 get_sfb_slot(node, port->remoteport);
815 } else if (is_line(node)) {
816 int is_4700_line = is_line_4700(node);
818 for (p = 1; p <= node->numports; p++) {
819 port = node->ports[p];
828 get_slb_slot(node, port->remoteport);
833 /* for each port of this node, map external ports */
834 for (p = 1; p <= node->numports; p++) {
835 port = node->ports[p];
844 static int get_line_index(ibnd_node_t * node)
848 if (is_line_4700(node))
849 retval = node->ch_slotnum;
851 retval = 3 * (node->ch_slotnum - 1) + node->ch_anafanum;
861 static int get_spine_index(ibnd_node_t * node)
865 if (is_spine_9288(node) || is_spine_2012(node))
866 retval = 3 * (node->ch_slotnum - 1) + node->ch_anafanum;
867 else if (is_spine_4700(node) || is_spine_4700x2(node))
868 retval = 2 * (node->ch_slotnum - 1) + node->ch_anafanum;
870 retval = node->ch_slotnum;
879 static int insert_line_router(ibnd_node_t * node, ibnd_chassis_t * chassis)
881 int i = get_line_index(node);
889 chassis->linenode[i] = node;
890 node->chassis = chassis;
894 static int insert_spine(ibnd_node_t * node, ibnd_chassis_t * chassis)
896 int i = get_spine_index(node);
904 chassis->spinenode[i] = node;
905 node->chassis = chassis;
911 ibnd_node_t *node, *remnode;
918 node = chassis->linenode[i];
920 if (!(node && is_line(node)))
923 is_4700_line = is_line_4700(node);
925 for (p = 1; p <= node->numports; p++) {
927 port = node->ports[p];
935 remnode = port->remoteport->node;
948 ibnd_node_t *node, *remnode;
955 node = chassis->spinenode[i];
956 if (!node)
959 is_4700x2 = is_spine_4700x2(node);
961 for (p = 1; p <= node->numports; p++) {
962 port = node->ports[p];
973 remnode = port->remoteport->node;
991 ibnd_node_t *node;
995 node = chassis->spinenode[i];
996 if (!node)
1000 chassis->chassisguid = node->guid - 1;
1010 static int build_chassis(ibnd_node_t * node, ibnd_chassis_t * chassis)
1016 /* we get here with node = chassis_spine */
1017 if (insert_spine(node, chassis))
1020 /* loop: pass on all ports of node */
1021 for (p = 1; p <= node->numports; p++) {
1023 port = node->ports[p];
1031 if (is_spine_4700x2(node) && (port->portnum > 18))
1034 remnode = port->remoteport->node;
1162 ibnd_node_t *node = port->node;
1163 int is_4700_line = is_line_4700(node);
1164 int is_4700x2_spine = is_spine_4700x2(node);
1166 if (!node->ch_found || (!is_line(node) && !is_4700x2_spine)) {
1179 if (port->node->ch_anafanum < 1 || port->node->ch_anafanum > 2) {
1184 chipnum = port->node->ch_anafanum - 1;
1186 if (is_line_24(node))
1188 else if (is_line_2024(node))
1219 static void add_node_to_chassis(ibnd_chassis_t * chassis, ibnd_node_t * node)
1221 node->chassis = chassis;
1222 node->next_chassis_node = chassis->nodes;
1223 chassis->nodes = node;
1229 1. pass on every Voltaire node
1230 2. catch spine chip for every Voltaire node
1240 ibnd_node_t *node;
1251 /* first pass on switches and build for every Voltaire node */
1255 for (node = fabric->switches; node; node = node->type_next) {
1257 vendor_id = mad_get_field(node->info, 0,IB_NODE_VENDORID_F);
1260 && fill_voltaire_chassis_record(node))
1263 && fill_mellanox_chassis_record(node))
1270 for (node = fabric->switches; node; node = node->type_next) {
1271 if (mad_get_field(node->info, 0,
1274 if (!node->ch_found
1275 || (node->chassis && node->chassis->chassisnum)
1276 || !is_spine(node))
1281 if (build_chassis(node, chassis_scan.current_chassis))
1287 for (node = fabric->nodes; node; node = node->next) {
1288 if (mad_get_field(node->info, 0,
1291 if (mad_get_field64(node->info, 0, IB_NODE_SYSTEM_GUID_F)) {
1292 chassis = find_chassisguid(fabric, node);
1300 get_chassisguid(node);
1310 for (node = fabric->nodes; node; node = node->next) {
1312 vendor_id = mad_get_field(node->info, 0,IB_NODE_VENDORID_F);
1316 if (mad_get_field64(node->info, 0, IB_NODE_SYSTEM_GUID_F)) {
1317 chassis = find_chassisguid(fabric, node);
1321 if (!node->ch_found) {
1322 node->ch_found = 1;
1323 add_node_to_chassis(chassis, node);
1326 insert_mellanox_line_and_spine(node, chassis);