/** * Get xid from an object of type of_hello. * @param obj Pointer to an object of type of_hello. * @param xid Pointer to the child object of type * uint32_t to be filled out. * */ void of_hello_xid_get( of_hello_t *obj, uint32_t *xid) { of_wire_buffer_t *wbuf; int offset = 0; /* Offset of value relative to the start obj */ int abs_offset; /* Offset of value relative to start of wbuf */ of_version_t ver; ASSERT(obj->object_id == OF_HELLO); ver = obj->version; wbuf = OF_OBJECT_TO_WBUF(obj); ASSERT(wbuf != NULL); /* By version, determine offset and current length (where needed) */ switch (ver) { case OF_VERSION_1_0: case OF_VERSION_1_1: case OF_VERSION_1_2: case OF_VERSION_1_3: offset = 4; break; default: ASSERT(0); } abs_offset = OF_OBJECT_ABSOLUTE_OFFSET(obj, offset); ASSERT(abs_offset >= 0); of_wire_buffer_u32_get(wbuf, abs_offset, xid); OF_LENGTH_CHECK_ASSERT(obj); return ; }
/** * Get role from an object of type of_bsn_controller_connection. * @param obj Pointer to an object of type of_bsn_controller_connection. * @param role Pointer to the child object of type * uint32_t to be filled out. * */ void of_bsn_controller_connection_role_get( of_bsn_controller_connection_t *obj, uint32_t *role) { of_wire_buffer_t *wbuf; int offset = 0; /* Offset of value relative to the start obj */ int abs_offset; /* Offset of value relative to start of wbuf */ of_version_t ver; ASSERT(obj->object_id == OF_BSN_CONTROLLER_CONNECTION); ver = obj->version; wbuf = OF_OBJECT_TO_WBUF(obj); ASSERT(wbuf != NULL); /* By version, determine offset and current length (where needed) */ switch (ver) { case OF_VERSION_1_3: offset = 4; break; default: ASSERT(0); } abs_offset = OF_OBJECT_ABSOLUTE_OFFSET(obj, offset); ASSERT(abs_offset >= 0); of_wire_buffer_u32_get(wbuf, abs_offset, role); OF_LENGTH_CHECK_ASSERT(obj); return ; }
/** * Get value from an object of type of_oxm_bsn_l3_interface_class_id. * @param obj Pointer to an object of type of_oxm_bsn_l3_interface_class_id. * @param value Pointer to the child object of type * uint32_t to be filled out. * */ void of_oxm_bsn_l3_interface_class_id_value_get( of_oxm_bsn_l3_interface_class_id_t *obj, uint32_t *value) { of_wire_buffer_t *wbuf; int offset = 0; /* Offset of value relative to the start obj */ int abs_offset; /* Offset of value relative to start of wbuf */ of_version_t ver; ASSERT(obj->object_id == OF_OXM_BSN_L3_INTERFACE_CLASS_ID); ver = obj->version; wbuf = OF_OBJECT_TO_WBUF(obj); ASSERT(wbuf != NULL); /* By version, determine offset and current length (where needed) */ switch (ver) { case OF_VERSION_1_2: case OF_VERSION_1_3: offset = 4; break; default: ASSERT(0); } abs_offset = OF_OBJECT_ABSOLUTE_OFFSET(obj, offset); ASSERT(abs_offset >= 0); of_wire_buffer_u32_get(wbuf, abs_offset, value); OF_LENGTH_CHECK_ASSERT(obj); return ; }
/** * Get experimenter from an object of type of_bsn_set_lacp_request. * @param obj Pointer to an object of type of_bsn_set_lacp_request. * @param experimenter Pointer to the child object of type * uint32_t to be filled out. * */ void of_bsn_set_lacp_request_experimenter_get( of_bsn_set_lacp_request_t *obj, uint32_t *experimenter) { of_wire_buffer_t *wbuf; int offset = 0; /* Offset of value relative to the start obj */ int abs_offset; /* Offset of value relative to start of wbuf */ of_version_t ver; ASSERT(obj->object_id == OF_BSN_SET_LACP_REQUEST); ver = obj->version; wbuf = OF_OBJECT_TO_WBUF(obj); ASSERT(wbuf != NULL); /* By version, determine offset and current length (where needed) */ switch (ver) { case OF_VERSION_1_3: offset = 8; break; default: ASSERT(0); } abs_offset = OF_OBJECT_ABSOLUTE_OFFSET(obj, offset); ASSERT(abs_offset >= 0); of_wire_buffer_u32_get(wbuf, abs_offset, experimenter); OF_LENGTH_CHECK_ASSERT(obj); return ; }
/** * Get subtype from an object of type of_action_id_bsn_set_tunnel_dst. * @param obj Pointer to an object of type of_action_id_bsn_set_tunnel_dst. * @param subtype Pointer to the child object of type * uint32_t to be filled out. * */ void of_action_id_bsn_set_tunnel_dst_subtype_get( of_action_id_bsn_set_tunnel_dst_t *obj, uint32_t *subtype) { of_wire_buffer_t *wbuf; int offset = 0; /* Offset of value relative to the start obj */ int abs_offset; /* Offset of value relative to start of wbuf */ of_version_t ver; ASSERT(obj->object_id == OF_ACTION_ID_BSN_SET_TUNNEL_DST); ver = obj->version; wbuf = OF_OBJECT_TO_WBUF(obj); ASSERT(wbuf != NULL); /* By version, determine offset and current length (where needed) */ switch (ver) { case OF_VERSION_1_3: offset = 8; break; default: ASSERT(0); } abs_offset = OF_OBJECT_ABSOLUTE_OFFSET(obj, offset); ASSERT(abs_offset >= 0); of_wire_buffer_u32_get(wbuf, abs_offset, subtype); OF_LENGTH_CHECK_ASSERT(obj); return ; }
/** * Get burst_size from an object of type of_meter_band_drop. * @param obj Pointer to an object of type of_meter_band_drop. * @param burst_size Pointer to the child object of type * uint32_t to be filled out. * */ void of_meter_band_drop_burst_size_get( of_meter_band_drop_t *obj, uint32_t *burst_size) { of_wire_buffer_t *wbuf; int offset = 0; /* Offset of value relative to the start obj */ int abs_offset; /* Offset of value relative to start of wbuf */ of_version_t ver; ASSERT(obj->object_id == OF_METER_BAND_DROP); ver = obj->version; wbuf = OF_OBJECT_TO_WBUF(obj); ASSERT(wbuf != NULL); /* By version, determine offset and current length (where needed) */ switch (ver) { case OF_VERSION_1_3: offset = 8; break; default: ASSERT(0); } abs_offset = OF_OBJECT_ABSOLUTE_OFFSET(obj, offset); ASSERT(abs_offset >= 0); of_wire_buffer_u32_get(wbuf, abs_offset, burst_size); OF_LENGTH_CHECK_ASSERT(obj); return ; }
/** * Get out_group from an object of type of_flow_modify. * @param obj Pointer to an object of type of_flow_modify. * @param out_group Pointer to the child object of type * uint32_t to be filled out. * */ void of_flow_modify_out_group_get( of_flow_modify_t *obj, uint32_t *out_group) { of_wire_buffer_t *wbuf; int offset = 0; /* Offset of value relative to the start obj */ int abs_offset; /* Offset of value relative to start of wbuf */ of_version_t ver; ASSERT(IS_FLOW_MOD_SUBTYPE(obj->object_id)); ver = obj->version; wbuf = OF_OBJECT_TO_WBUF(obj); ASSERT(wbuf != NULL); /* By version, determine offset and current length (where needed) */ switch (ver) { case OF_VERSION_1_1: case OF_VERSION_1_2: case OF_VERSION_1_3: offset = 40; break; default: ASSERT(0); } abs_offset = OF_OBJECT_ABSOLUTE_OFFSET(obj, offset); ASSERT(abs_offset >= 0); of_wire_buffer_u32_get(wbuf, abs_offset, out_group); OF_LENGTH_CHECK_ASSERT(obj); return ; }
/** * Get subtype from an object of type of_bsn_gentable_entry_desc_stats_reply. * @param obj Pointer to an object of type of_bsn_gentable_entry_desc_stats_reply. * @param subtype Pointer to the child object of type * uint32_t to be filled out. * */ void of_bsn_gentable_entry_desc_stats_reply_subtype_get( of_bsn_gentable_entry_desc_stats_reply_t *obj, uint32_t *subtype) { of_wire_buffer_t *wbuf; int offset = 0; /* Offset of value relative to the start obj */ int abs_offset; /* Offset of value relative to start of wbuf */ of_version_t ver; ASSERT(obj->object_id == OF_BSN_GENTABLE_ENTRY_DESC_STATS_REPLY); ver = obj->version; wbuf = OF_OBJECT_TO_WBUF(obj); ASSERT(wbuf != NULL); /* By version, determine offset and current length (where needed) */ switch (ver) { case OF_VERSION_1_3: offset = 20; break; default: ASSERT(0); } abs_offset = OF_OBJECT_ABSOLUTE_OFFSET(obj, offset); ASSERT(abs_offset >= 0); of_wire_buffer_u32_get(wbuf, abs_offset, subtype); OF_LENGTH_CHECK_ASSERT(obj); return ; }
/** * Get experimenter from an object of type of_experimenter_error_msg. * @param obj Pointer to an object of type of_experimenter_error_msg. * @param experimenter Pointer to the child object of type * uint32_t to be filled out. * */ void of_experimenter_error_msg_experimenter_get( of_experimenter_error_msg_t *obj, uint32_t *experimenter) { of_wire_buffer_t *wbuf; int offset = 0; /* Offset of value relative to the start obj */ int abs_offset; /* Offset of value relative to start of wbuf */ of_version_t ver; ASSERT(obj->object_id == OF_EXPERIMENTER_ERROR_MSG); ver = obj->version; wbuf = OF_OBJECT_TO_WBUF(obj); ASSERT(wbuf != NULL); /* By version, determine offset and current length (where needed) */ switch (ver) { case OF_VERSION_1_2: case OF_VERSION_1_3: offset = 12; break; default: ASSERT(0); } abs_offset = OF_OBJECT_ABSOLUTE_OFFSET(obj, offset); ASSERT(abs_offset >= 0); of_wire_buffer_u32_get(wbuf, abs_offset, experimenter); OF_LENGTH_CHECK_ASSERT(obj); return ; }
int of_object_xid_get(of_object_t *obj, uint32_t *xid) { of_wire_buffer_t *wbuf; if ((wbuf = OF_OBJECT_TO_WBUF(obj)) == NULL) { return OF_ERROR_PARAM; } of_wire_buffer_u32_get(wbuf, OF_OBJECT_ABSOLUTE_OFFSET(obj, OF_MESSAGE_XID_OFFSET), xid); return OF_ERROR_NONE; }