]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
clean up and remove references to old proto_vmps_process
authorAlan T. DeKok <aland@freeradius.org>
Tue, 2 Mar 2021 12:53:27 +0000 (07:53 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Tue, 2 Mar 2021 12:53:27 +0000 (07:53 -0500)
src/listen/vmps/proto_vmps.c
src/listen/vmps/proto_vmps.h

index d1c382f8e1d616ebf4bd4c7feb4e463bb8a3456d..963a8519d22a53db0dc51796c19526b4b3f53b56 100644 (file)
@@ -69,7 +69,7 @@ static CONF_PARSER const limit_config[] = {
  */
 static CONF_PARSER const proto_vmps_config[] = {
        { FR_CONF_OFFSET("type", FR_TYPE_VOID | FR_TYPE_MULTI | FR_TYPE_NOT_EMPTY, proto_vmps_t,
-                         type_submodule), .func = type_parse },
+                         allowed_types), .func = type_parse },
        { FR_CONF_OFFSET("transport", FR_TYPE_VOID, proto_vmps_t, io.submodule),
          .func = transport_parse },
 
@@ -105,18 +105,27 @@ fr_dict_attr_autoload_t proto_vmps_dict_attr[] = {
  *     - 0 on success.
  *     - -1 on failure.
  */
-static int type_parse(TALLOC_CTX *ctx, void *out, void *parent,
+static int type_parse(UNUSED TALLOC_CTX *ctx, void *out, void *parent,
                      CONF_ITEM *ci, UNUSED CONF_PARSER const *rule)
 {
-       static char const *type_lib_table[FR_VQP_MAX_CODE] = {
-               [FR_PACKET_TYPE_VALUE_JOIN_REQUEST] = "process",
-               [FR_PACKET_TYPE_VALUE_RECONFIRM_REQUEST] = "process",
-       };
        proto_vmps_t            *inst = talloc_get_type_abort(parent, proto_vmps_t);
+       fr_dict_enum_t          *dv;
+       CONF_PAIR               *cp;
+       char const              *value;
+
+       cp = cf_item_to_pair(ci);
+       value = cf_pair_value(cp);
 
-       return fr_app_process_type_parse(ctx, out, ci, attr_packet_type, "proto_vmps",
-                                        type_lib_table, NUM_ELEMENTS(type_lib_table),
-                                        inst->type_submodule_by_code, NUM_ELEMENTS(inst->type_submodule_by_code));
+       dv = fr_dict_enum_by_name(attr_packet_type, value, -1);
+       if (!dv || (dv->value->vb_uint32 >= FR_VQP_MAX_CODE)) {
+               cf_log_err(ci, "Unknown VMPS packet type '%s'", value);
+               return -1;
+       }
+
+       inst->allowed[dv->value->vb_uint32] = true;
+       *((char const **) out) = value;
+
+       return 0;
 }
 
 /** Wrapper around dl_instance
index 7a2309e9940fb053b55c31d3df9eca27df7781d6..a6027cbb3fbcab3f78879fc46a9d690d4fe1e2dd 100644 (file)
@@ -32,8 +32,8 @@
 typedef struct {
        fr_io_instance_t                io;                             //!< wrapper for IO abstraction
 
-       dl_module_inst_t                **type_submodule;               //!< Instance of the various types
-       dl_module_inst_t                *type_submodule_by_code[FR_VQP_MAX_CODE];       //!< Lookup process entry point by code.
+       char                            **allowed_types;                //!< names for for 'type = ...'
+       bool                            allowed[FR_VQP_MAX_CODE];       //!< indexed by value
 
        uint32_t                        max_packet_size;                //!< for message ring buffer.
        uint32_t                        num_messages;                   //!< for message ring buffer.