]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: checks/obj_type: Add a new object type for checks
authorChristopher Faulet <cfaulet@haproxy.com>
Tue, 21 Apr 2020 09:46:40 +0000 (11:46 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Mon, 27 Apr 2020 07:39:38 +0000 (09:39 +0200)
An object type is now affected to the check structure.

include/proto/obj_type.h
include/types/checks.h
include/types/obj_type.h
src/server.c

index cc35d5cddd53b996d9b5e82035ae2b0c928ace19..c1ac5f424a4b68d8d3245b94d484b473629d4a01 100644 (file)
@@ -32,6 +32,7 @@
 #include <types/server.h>
 #include <types/stream.h>
 #include <types/stream_interface.h>
+#include <types/checks.h>
 
 static inline enum obj_type obj_type(const enum obj_type *t)
 {
@@ -53,6 +54,7 @@ static inline const char *obj_type_name(const enum obj_type *t)
        case OBJ_TYPE_SRVRQ:    return "SRVRQ";
        case OBJ_TYPE_CS:       return "CS";
        case OBJ_TYPE_STREAM:   return "STREAM";
+       case OBJ_TYPE_CHECK:    return "CHECK";
        default:                return "!INVAL!";
        }
 }
@@ -172,6 +174,18 @@ static inline struct stream *objt_stream(enum obj_type *t)
        return __objt_stream(t);
 }
 
+static inline struct check *__objt_check(enum obj_type *t)
+{
+       return container_of(t, struct check, obj_type);
+}
+
+static inline struct check *objt_check(enum obj_type *t)
+{
+       if (!t || *t != OBJ_TYPE_CHECK)
+               return NULL;
+       return __objt_check(t);
+}
+
 static inline void *obj_base_ptr(enum obj_type *t)
 {
        switch (obj_type(t)) {
@@ -184,6 +198,7 @@ static inline void *obj_base_ptr(enum obj_type *t)
        case OBJ_TYPE_CONN:     return __objt_conn(t);
        case OBJ_TYPE_SRVRQ:    return __objt_dns_srvrq(t);
        case OBJ_TYPE_CS:       return __objt_cs(t);
+       case OBJ_TYPE_CHECK:    return __objt_check(t);
        default:                return t; // exact pointer for invalid case
        }
 }
index f52e4a4d880ebb5a7fafb9f44db7909daabda8bb..d1a53ed2b36b6a41fc5384cc84475ff362c7969b 100644 (file)
@@ -158,6 +158,7 @@ enum {
 };
 
 struct check {
+       enum obj_type obj_type;                 /* object type == OBJ_TYPE_CHECK */
        struct session *sess;                   /* Health check session. */
        struct vars vars;                       /* Health check dynamic variables. */
        struct xprt_ops *xprt;                  /* transport layer operations for health checks */
index 94107181ec57314d714fbf17b4f6b14709c7c5fe..da3e735ba079f07a534a5210a8454337e40c0562 100644 (file)
@@ -42,6 +42,7 @@ enum obj_type {
        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_CHECK,        /* object is a struct check */
        OBJ_TYPE_ENTRIES       /* last one : number of entries */
 } __attribute__((packed)) ;
 
index e3a74498dfb9418559698bd7ab42f39058c621dd..14eb41f9d92429d788432bcff4ad8106f2248bb0 100644 (file)
@@ -1758,11 +1758,13 @@ struct server *new_server(struct proxy *proxy)
        srv->next_state = SRV_ST_RUNNING; /* early server setup */
        srv->last_change = now.tv_sec;
 
+       srv->check.obj_type = OBJ_TYPE_CHECK;
        srv->check.status = HCHK_STATUS_INI;
        srv->check.server = srv;
        srv->check.proxy = proxy;
        srv->check.tcpcheck_rules = &proxy->tcpcheck_rules;
 
+       srv->agent.obj_type = OBJ_TYPE_CHECK;
        srv->agent.status = HCHK_STATUS_INI;
        srv->agent.server = srv;
        srv->agent.proxy = proxy;