Exemplo n.º 1
0
int avb_join_multicast_group(unsigned char addr[6])
{
  int found = -1;
  
  for (int i=0;i<AVB_MAX_MMRP_GROUPS;i++)
    if (entries[i].active && addr_eq(addr, entries[i].addr)) 
      found = i;

  if (found == -1) 
    for (int i=0;i<AVB_MAX_MMRP_GROUPS;i++)
      if (!entries[i].active) {
        found = i;
        break;
      }

  if (found == -1)
    for (int i=0;i<AVB_MAX_MMRP_GROUPS;i++)
      if (entries[i].active && mrp_is_observer(entries[i].attr)) {
        found = i;
        break;
      }


  if (found != -1) {
    entries[found].active = 1;
    memcpy(entries[found].addr, addr, 6);
    mrp_mad_begin(entries[found].attr);
    mrp_mad_join(entries[found].attr, 1);
    return 1;
  }

  return 0;
}
Exemplo n.º 2
0
int avb_join_vlan(int vlan)
{
  int found = -1;
  
  for (int i=0;i<AVB_MAX_NUM_VLAN;i++)
    if (entries[i].active && (entries[i].vlan == vlan)) 
      found = i;

  if (found == -1) 
    for (int i=0;i<AVB_MAX_NUM_VLAN;i++)
      if (!entries[i].active) {
        found = i;
        break;
      }

  if (found == -1)
    for (int i=0;i<AVB_MAX_NUM_VLAN;i++)
      if (entries[i].active && mrp_is_observer(entries[i].attr)) {
        found = i;
        break;
      }

  if (found != -1) {
    entries[found].active = 1;
    entries[found].vlan = vlan;
    mrp_mad_begin(entries[found].attr);
    mrp_mad_join(entries[found].attr, 1);
    return 1;
  }

  return 0;
}