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; }
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; }