static void extension_action_id_object_id_get(of_object_t *obj, of_object_id_t *id) { uint32_t exp_id; uint8_t *buf; *id = OF_ACTION_ID_EXPERIMENTER; buf = OF_OBJECT_BUFFER_INDEX(obj, 0); buf_u32_get(buf + OF_ACTION_EXPERIMENTER_ID_OFFSET, &exp_id); switch (exp_id) { case OF_EXPERIMENTER_ID_BSN: { uint32_t subtype; buf_u32_get(buf + OF_ACTION_EXPERIMENTER_SUBTYPE_OFFSET, &subtype); switch (subtype) { case 1: *id = OF_ACTION_ID_BSN_MIRROR; break; case 2: *id = OF_ACTION_ID_BSN_SET_TUNNEL_DST; break; } break; } case OF_EXPERIMENTER_ID_NICIRA: { uint16_t subtype; buf_u16_get(buf + OF_ACTION_EXPERIMENTER_SUBTYPE_OFFSET, &subtype); switch (subtype) { case 18: *id = OF_ACTION_ID_NICIRA_DEC_TTL; break; } break; } } }
static int extension_instruction_object_id_get(of_object_t *obj, of_object_id_t *id) { uint32_t exp_id; uint8_t *buf; *id = OF_INSTRUCTION_EXPERIMENTER; buf = OF_OBJECT_BUFFER_INDEX(obj, 0); buf_u32_get(buf + OF_INSTRUCTION_EXPERIMENTER_ID_OFFSET, &exp_id); switch (exp_id) { case OF_EXPERIMENTER_ID_BSN: { uint32_t subtype; buf_u32_get(buf + OF_INSTRUCTION_EXPERIMENTER_SUBTYPE_OFFSET, &subtype); switch (subtype) { case 0: *id = OF_INSTRUCTION_BSN_DISABLE_SRC_MAC_CHECK; break; case 1: *id = OF_INSTRUCTION_BSN_ARP_OFFLOAD; break; } break; } } return OF_ERROR_NONE; }