int avb_mmrp_merge_message(char *buf, mrp_attribute_state *st, int vector) { mrp_msg_header *mrp_hdr = (mrp_msg_header *) buf; mrp_vector_header *hdr = (mrp_vector_header *) (buf + sizeof(mrp_msg_header)); int merge = 0; int num_values; if (mrp_hdr->AttributeType != AVB_MMRP_MAC_VECTOR_ATTRIBUTE_TYPE) return 0; num_values = hdr->NumberOfValuesLow; if (num_values == 0) merge = 1; if (merge) { mmrp_mac_vector_first_value *first_value = (mmrp_mac_vector_first_value *) (buf + sizeof(mrp_msg_header) + sizeof(mrp_vector_header)); char *addr = (char *) st->attribute_info; for (int i=0;i<6;i++) first_value->addr[i] = addr[i]; mrp_encode_three_packed_event(buf, vector, st->attribute_type); hdr->NumberOfValuesLow = num_values+1; } return merge; }
int avb_mvrp_merge_message(char *buf, mrp_attribute_state *st, int vector) { mrp_msg_header *mrp_hdr = (mrp_msg_header *) buf; mrp_vector_header *hdr = (mrp_vector_header *) (buf + sizeof(mrp_msg_header)); int merge = 0; int num_values; if (mrp_hdr->AttributeType != AVB_MVRP_ATTRIBUTE_TYPE) return 0; num_values = hdr->NumberOfValuesLow; if (num_values == 0) merge = 1; if (merge) { mvrp_first_value *first_value = (mvrp_first_value *) (buf + sizeof(mrp_msg_header) + sizeof(mrp_vector_header)); int *vlan = (int*) st->attribute_info; first_value->vlan[0] = (*vlan >> 8) & 0xff; first_value->vlan[1] = (*vlan) & 0xff; mrp_encode_three_packed_event(buf, vector, st->attribute_type); hdr->NumberOfValuesLow = num_values+1; } return merge; }