示例#1
0
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;   
}
示例#2
0
文件: avb_mvrp.c 项目: ozel/sw_avb
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;   
}