Skip to content

Commit 0aa8b3f

Browse files
authored
Add more static metadata (sonic-net#90)
1 parent 7a05649 commit 0aa8b3f

33 files changed

+2402
-168
lines changed

lib/src/Makefile.am

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ AM_CPPFLAGS += \
3030
-Wpointer-arith \
3131
-Wredundant-decls \
3232
-Wstack-protector \
33-
-Wstrict-aliasing=2 \
33+
-Wstrict-aliasing=3 \
3434
-Wswitch \
3535
-Wswitch-default \
3636
-Wunreachable-code \

meta/Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ OBJ = \
9999

100100
DEPS = sai_meta.h sai_extra.h
101101

102-
CFLAGS=-std=c++11 -I/usr/include/swss -I/usr/include/sai -I/usr/include $(warnings)
102+
CFLAGS=-std=c++11 -I/usr/include/swss -I/usr/include/sai -I/usr/include -I. -I.. $(warnings)
103103
LDFLAGS=-L/usr/lib -lswsscommon
104104

105105
all: tests

meta/sai_meta.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "sai_meta.h"
22
#include "sai_extra.h"
3+
#include <string.h>
34

45
#include <arpa/inet.h>
56

meta/sai_meta.h

+131-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ extern "C" {
1414
}
1515

1616
#include "swss/logger.h"
17-
#include "../common/saiserialize.h"
17+
#include "common/saiserialize.h"
1818

1919
#define MAX_LIST_COUNT 128
2020

@@ -37,6 +37,69 @@ extern "C" {
3737

3838
#define StringifyEnum(x) ((std::is_enum<x>::value) ? #x : 0)
3939

40+
/*
41+
typedef enum _sai_attr_serialization_type_t
42+
{
43+
SAI_SERIALIZATION_TYPE_BOOL,
44+
SAI_SERIALIZATION_TYPE_CHARDATA,
45+
SAI_SERIALIZATION_TYPE_UINT8,
46+
SAI_SERIALIZATION_TYPE_INT8,
47+
SAI_SERIALIZATION_TYPE_UINT16,
48+
SAI_SERIALIZATION_TYPE_INT16,
49+
SAI_SERIALIZATION_TYPE_UINT32,
50+
SAI_SERIALIZATION_TYPE_INT32,
51+
SAI_SERIALIZATION_TYPE_UINT64,
52+
SAI_SERIALIZATION_TYPE_INT64,
53+
SAI_SERIALIZATION_TYPE_MAC,
54+
SAI_SERIALIZATION_TYPE_IP4,
55+
SAI_SERIALIZATION_TYPE_IP6,
56+
SAI_SERIALIZATION_TYPE_IP_ADDRESS,
57+
SAI_SERIALIZATION_TYPE_OBJECT_ID,
58+
SAI_SERIALIZATION_TYPE_OBJECT_LIST,
59+
SAI_SERIALIZATION_TYPE_UINT8_LIST,
60+
SAI_SERIALIZATION_TYPE_INT8_LIST,
61+
SAI_SERIALIZATION_TYPE_UINT16_LIST,
62+
SAI_SERIALIZATION_TYPE_INT16_LIST,
63+
SAI_SERIALIZATION_TYPE_UINT32_LIST,
64+
SAI_SERIALIZATION_TYPE_INT32_LIST,
65+
SAI_SERIALIZATION_TYPE_UINT32_RANGE,
66+
SAI_SERIALIZATION_TYPE_INT32_RANGE,
67+
SAI_SERIALIZATION_TYPE_VLAN_LIST,
68+
69+
SAI_SERIALIZATION_TYPE_ACL_FIELD_DATA_BOOL,
70+
SAI_SERIALIZATION_TYPE_ACL_FIELD_DATA_UINT8,
71+
SAI_SERIALIZATION_TYPE_ACL_FIELD_DATA_INT8,
72+
SAI_SERIALIZATION_TYPE_ACL_FIELD_DATA_UINT16,
73+
SAI_SERIALIZATION_TYPE_ACL_FIELD_DATA_INT16,
74+
SAI_SERIALIZATION_TYPE_ACL_FIELD_DATA_INT32,
75+
SAI_SERIALIZATION_TYPE_ACL_FIELD_DATA_UINT32,
76+
SAI_SERIALIZATION_TYPE_ACL_FIELD_DATA_MAC,
77+
SAI_SERIALIZATION_TYPE_ACL_FIELD_DATA_IP4,
78+
SAI_SERIALIZATION_TYPE_ACL_FIELD_DATA_IP6,
79+
SAI_SERIALIZATION_TYPE_ACL_FIELD_DATA_OBJECT_ID,
80+
SAI_SERIALIZATION_TYPE_ACL_FIELD_DATA_OBJECT_LIST,
81+
SAI_SERIALIZATION_TYPE_ACL_FIELD_DATA_UINT8_LIST,
82+
83+
SAI_SERIALIZATION_TYPE_ACL_ACTION_DATA_UINT8,
84+
SAI_SERIALIZATION_TYPE_ACL_ACTION_DATA_INT8,
85+
SAI_SERIALIZATION_TYPE_ACL_ACTION_DATA_UINT16,
86+
SAI_SERIALIZATION_TYPE_ACL_ACTION_DATA_INT16,
87+
SAI_SERIALIZATION_TYPE_ACL_ACTION_DATA_UINT32,
88+
SAI_SERIALIZATION_TYPE_ACL_ACTION_DATA_INT32,
89+
SAI_SERIALIZATION_TYPE_ACL_ACTION_DATA_MAC,
90+
SAI_SERIALIZATION_TYPE_ACL_ACTION_DATA_IPV4,
91+
SAI_SERIALIZATION_TYPE_ACL_ACTION_DATA_IPV6,
92+
SAI_SERIALIZATION_TYPE_ACL_ACTION_DATA_OBJECT_ID,
93+
SAI_SERIALIZATION_TYPE_ACL_ACTION_DATA_OBJECT_LIST,
94+
95+
SAI_SERIALIZATION_TYPE_PORT_BREAKOUT,
96+
SAI_SERIALIZATION_TYPE_QOS_MAP_LIST,
97+
SAI_SERIALIZATION_TYPE_TUNNEL_MAP_LIST,
98+
SAI_SERIALIZATION_TYPE_ACL_CAPABILITY
99+
100+
} sai_attr_serialization_type_t;
101+
*/
102+
40103
typedef struct _sai_object_meta_key_t
41104
{
42105
sai_object_type_t object_type;
@@ -325,6 +388,38 @@ typedef struct _sai_attr_condition_t {
325388
// also must be ignored on post set/remve (check flags) so
326389
// we could validate ranges for example what are valid when doing query
327390

391+
/**
392+
* @brief Defines enum metadata information.
393+
*/
394+
typedef struct _sai_enum_metadata_t {
395+
396+
/**
397+
* @brief String representation of enum typedef.
398+
*/
399+
const char* name;
400+
401+
/**
402+
* @brief Values count in enum.
403+
*/
404+
const size_t valuescount;
405+
406+
/**
407+
* @brief Array of enum values.
408+
*/
409+
const int* values;
410+
411+
/**
412+
* @brief Array of enum values string names.
413+
*/
414+
const char** valuesnames;
415+
416+
/**
417+
* @brief Array of enum values string short names.
418+
*/
419+
const char** valuesshortnames;
420+
421+
} sai_enum_metadata_t;
422+
328423
typedef struct _sai_attr_metadata_t {
329424

330425
/*
@@ -339,6 +434,11 @@ typedef struct _sai_attr_metadata_t {
339434

340435
const sai_attr_id_t attrid;
341436

437+
/**
438+
* Specifies valid attribute id name for this object type.
439+
*/
440+
const char* attridname;
441+
342442
/*
343443
* Specifies serialization type for this attribute.
344444
*/
@@ -442,6 +542,12 @@ typedef struct _sai_attr_metadata_t {
442542

443543
const std::set<int32_t>& enumallowedvalues;
444544

545+
/*
546+
* If attribute is enum value, then this will
547+
* hold enum metadata.
548+
*/
549+
const sai_enum_metadata_t* const enummetadata;
550+
445551
/*
446552
* Specifies condition type of attribute.
447553
*
@@ -595,6 +701,26 @@ EXTERN_METADATA(vlan);
595701
EXTERN_METADATA(vlan_member);
596702
EXTERN_METADATA(wred);
597703

704+
#define DEFINE_ENUM_METADATA(x,count)\
705+
const sai_enum_metadata_t metadata_enum_ ## x = {\
706+
.name = metadata_ ## x ## _enum_name,\
707+
.valuescount = count,\
708+
.values = (const int*)metadata_ ## x ## _enum_values,\
709+
.valuesnames = metadata_ ## x ## _enum_values_names,\
710+
.valuesshortnames = metadata_ ## x ## _enum_values_short_names,\
711+
};
712+
713+
714+
extern const sai_enum_metadata_t metadata_enum_sai_port_oper_status_t;
715+
extern const sai_enum_metadata_t metadata_enum_sai_status_t;
716+
extern const sai_enum_metadata_t metadata_enum_sai_fdb_event_t;
717+
extern const sai_enum_metadata_t metadata_enum_sai_object_type_t;
718+
extern const sai_enum_metadata_t metadata_enum_sai_port_event_t;
719+
extern const sai_enum_metadata_t metadata_enum_sai_packet_color_t;
720+
extern const sai_enum_metadata_t metadata_enum_sai_packet_action_t;
721+
extern const sai_enum_metadata_t metadata_enum_sai_next_hop_group_type_t;
722+
extern const sai_enum_metadata_t metadata_enum_sai_meter_type_t;
723+
598724
struct HashForEnum
599725
{
600726
template <typename T> std::size_t operator()(T t) const
@@ -625,6 +751,10 @@ extern const sai_attribute_t* get_object_previous_attr(
625751
extern sai_status_t meta_init_db();
626752
extern void meta_init();
627753

754+
extern const sai_attr_metadata_t* sai_metadata_get_attr_metadata(
755+
_In_ sai_object_type_t objecttype,
756+
_In_ sai_attr_id_t attrid);
757+
628758
// GENERIC FUNCTION POINTERS
629759

630760
typedef sai_status_t (*sai_create_generic_fn)(

0 commit comments

Comments
 (0)