of_list_bsn_gentable_bucket_stats_entry_t * of_list_bsn_gentable_bucket_stats_entry_new(of_version_t version) { of_list_bsn_gentable_bucket_stats_entry_t *obj; int bytes; bytes = of_object_fixed_len[version][OF_LIST_BSN_GENTABLE_BUCKET_STATS_ENTRY] + of_object_extra_len[version][OF_LIST_BSN_GENTABLE_BUCKET_STATS_ENTRY]; /* Allocate a maximum-length wire buffer assuming we'll be appending to it. */ if ((obj = (of_list_bsn_gentable_bucket_stats_entry_t *)of_object_new(OF_WIRE_BUFFER_MAX_LENGTH)) == NULL) { return NULL; } of_list_bsn_gentable_bucket_stats_entry_init(obj, version, bytes, 0); return obj; }
/** * Bind an object of type of_list_bsn_gentable_bucket_stats_entry_t to the parent of type of_bsn_gentable_bucket_stats_reply for * member entries * @param obj Pointer to an object of type of_bsn_gentable_bucket_stats_reply. * @param entries Pointer to the child object of type * of_list_bsn_gentable_bucket_stats_entry_t to be filled out. * \ingroup of_bsn_gentable_bucket_stats_reply * * The parameter entries is filled out to point to the same underlying * wire buffer as its parent. * */ void of_bsn_gentable_bucket_stats_reply_entries_bind( of_bsn_gentable_bucket_stats_reply_t *obj, of_list_bsn_gentable_bucket_stats_entry_t *entries) { 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; int cur_len = 0; /* Current length of object data */ ASSERT(obj->object_id == OF_BSN_GENTABLE_BUCKET_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 = 24; cur_len = _END_LEN(obj, offset); break; default: ASSERT(0); } abs_offset = OF_OBJECT_ABSOLUTE_OFFSET(obj, offset); ASSERT(abs_offset >= 0); ASSERT(cur_len >= 0 && cur_len < 64 * 1024); /* Initialize child */ of_list_bsn_gentable_bucket_stats_entry_init(entries, obj->version, 0, 1); /* Attach to parent */ entries->parent = (of_object_t *)obj; entries->wire_object.wbuf = obj->wire_object.wbuf; entries->wire_object.obj_offset = abs_offset; entries->wire_object.owned = 0; entries->length = cur_len; OF_LENGTH_CHECK_ASSERT(obj); return ; }