diff --git a/include/proto/obj_type.h b/include/proto/obj_type.h index 47273caa5..afb8d9047 100644 --- a/include/proto/obj_type.h +++ b/include/proto/obj_type.h @@ -30,6 +30,7 @@ #include #include #include +#include #include static inline enum obj_type obj_type(enum obj_type *t) @@ -51,6 +52,7 @@ static inline const char *obj_type_name(enum obj_type *t) case OBJ_TYPE_CONN: return "CONN"; case OBJ_TYPE_SRVRQ: return "SRVRQ"; case OBJ_TYPE_CS: return "CS"; + case OBJ_TYPE_STREAM: return "STREAM"; default: return "!INVAL!"; } } @@ -158,6 +160,18 @@ static inline struct dns_srvrq *objt_dns_srvrq(enum obj_type *t) return __objt_dns_srvrq(t); } +static inline struct stream *__objt_stream(enum obj_type *t) +{ + return container_of(t, struct stream, obj_type); +} + +static inline struct stream *objt_stream(enum obj_type *t) +{ + if (!t || *t != OBJ_TYPE_STREAM) + return NULL; + return __objt_stream(t); +} + static inline void *obj_base_ptr(enum obj_type *t) { switch (obj_type(t)) { diff --git a/include/types/obj_type.h b/include/types/obj_type.h index e141d69e5..94107181e 100644 --- a/include/types/obj_type.h +++ b/include/types/obj_type.h @@ -41,6 +41,7 @@ enum obj_type { OBJ_TYPE_CONN, /* object is a struct connection */ OBJ_TYPE_SRVRQ, /* object is a struct dns_srvrq */ OBJ_TYPE_CS, /* object is a struct conn_stream */ + OBJ_TYPE_STREAM, /* object is a struct stream */ OBJ_TYPE_ENTRIES /* last one : number of entries */ } __attribute__((packed)) ; diff --git a/include/types/stream.h b/include/types/stream.h index 93a39a3ec..b6a3e8495 100644 --- a/include/types/stream.h +++ b/include/types/stream.h @@ -151,7 +151,9 @@ struct stream { struct stktable *table; } store[8]; /* tracked stickiness values to store */ int store_count; - /* 4 unused bytes here */ + + enum obj_type obj_type; /* object type == OBJ_TYPE_STREAM */ + /* 3 unused bytes here */ struct stkctr stkctr[MAX_SESS_STKCTR]; /* content-aware stick counters */