- vec_add2(jm->sw_if_subif_table, sub, 1);
-
- vec_validate(sub->interface_name, strlen((char *)s) + 1);
- strncpy((char *)sub->interface_name, (char *)s,
- vec_len(sub->interface_name));
- sub->sw_if_index = ntohl(mp->sw_if_index);
- sub->sub_id = ntohl(mp->sub_id);
-
- sub->sub_dot1ad = mp->sub_dot1ad;
- sub->sub_number_of_tags = mp->sub_number_of_tags;
- sub->sub_outer_vlan_id = ntohs(mp->sub_outer_vlan_id);
- sub->sub_inner_vlan_id = ntohs(mp->sub_inner_vlan_id);
- sub->sub_exact_match = mp->sub_exact_match;
- sub->sub_default = mp->sub_default;
- sub->sub_outer_vlan_id_any = mp->sub_outer_vlan_id_any;
- sub->sub_inner_vlan_id_any = mp->sub_inner_vlan_id_any;
-
- /* vlan tag rewrite */
- sub->vtr_op = ntohl(mp->vtr_op);
- sub->vtr_push_dot1q = ntohl(mp->vtr_push_dot1q);
- sub->vtr_tag1 = ntohl(mp->vtr_tag1);
- sub->vtr_tag2 = ntohl(mp->vtr_tag2);
- }
- vppjni_unlock (jm);
+ if (jm->collect_indices) {
+ u32 pos = vec_len(jm->sw_if_dump_if_indices);
+ vec_validate(jm->sw_if_dump_if_indices, pos);
+ jm->sw_if_dump_if_indices[pos] = sw_if_index;
+ }
+
+ vec_validate_init_empty(jm->sw_if_table, sw_if_index, empty_sw_if_details);
+ sw_if_details = &jm->sw_if_table[sw_if_index];
+ sw_if_details->valid = 1;
+
+ snprintf((char *)sw_if_details->interface_name,
+ sizeof(sw_if_details->interface_name), "%s", (char *)s);
+ sw_if_details->sw_if_index = sw_if_index;
+ sw_if_details->sup_sw_if_index = ntohl(mp->sup_sw_if_index);
+ sw_if_details->l2_address_length = ntohl (mp->l2_address_length);
+ ASSERT(sw_if_details->l2_address_length <= sizeof(sw_if_details->l2_address));
+ memcpy(sw_if_details->l2_address, mp->l2_address,
+ sw_if_details->l2_address_length);
+ sw_if_details->sub_id = ntohl (mp->sub_id);
+ sw_if_details->sub_outer_vlan_id = ntohl (mp->sub_outer_vlan_id);
+ sw_if_details->sub_inner_vlan_id = ntohl (mp->sub_inner_vlan_id);
+ sw_if_details->vtr_op = ntohl (mp->vtr_op);
+ sw_if_details->vtr_push_dot1q = ntohl (mp->vtr_push_dot1q);
+ sw_if_details->vtr_tag1 = ntohl (mp->vtr_tag1);
+ sw_if_details->vtr_tag2 = ntohl (mp->vtr_tag2);
+
+ sw_if_details->admin_up_down = mp->admin_up_down;
+ sw_if_details->link_up_down = mp->link_up_down;
+ sw_if_details->link_duplex = mp->link_duplex;
+ sw_if_details->link_speed = mp->link_speed;
+ sw_if_details->sub_dot1ad = mp->sub_dot1ad;
+ sw_if_details->sub_number_of_tags = mp->sub_number_of_tags;
+ sw_if_details->sub_exact_match = mp->sub_exact_match;
+ sw_if_details->sub_default = mp->sub_default;
+ sw_if_details->sub_outer_vlan_id_any = mp->sub_outer_vlan_id_any;
+ sw_if_details->sub_inner_vlan_id_any = mp->sub_inner_vlan_id_any;
+
+ hash_set_mem (jm->sw_if_index_by_interface_name, s, sw_if_index);
+ DEBUG_LOG ("Got interface %s", (char *)s);
+
+ /* In sub interface case, fill the sub interface table entry */
+ if (mp->sw_if_index != mp->sup_sw_if_index) {
+ sw_interface_subif_t * sub = NULL;
+
+ vec_add2(jm->sw_if_subif_table, sub, 1);
+
+ vec_validate(sub->interface_name, strlen((char *)s) + 1);
+ strncpy((char *)sub->interface_name, (char *)s,
+ vec_len(sub->interface_name));
+ sub->sw_if_index = ntohl(mp->sw_if_index);
+ sub->sub_id = ntohl(mp->sub_id);
+
+ sub->sub_dot1ad = mp->sub_dot1ad;
+ sub->sub_number_of_tags = mp->sub_number_of_tags;
+ sub->sub_outer_vlan_id = ntohs(mp->sub_outer_vlan_id);
+ sub->sub_inner_vlan_id = ntohs(mp->sub_inner_vlan_id);
+ sub->sub_exact_match = mp->sub_exact_match;
+ sub->sub_default = mp->sub_default;
+ sub->sub_outer_vlan_id_any = mp->sub_outer_vlan_id_any;
+ sub->sub_inner_vlan_id_any = mp->sub_inner_vlan_id_any;
+
+ /* vlan tag rewrite */
+ sub->vtr_op = ntohl(mp->vtr_op);
+ sub->vtr_push_dot1q = ntohl(mp->vtr_push_dot1q);
+ sub->vtr_tag1 = ntohl(mp->vtr_tag1);
+ sub->vtr_tag2 = ntohl(mp->vtr_tag2);
+ }
+ vppjni_unlock (jm);