Skip to content

Commit

Permalink
Add the same shim for all modules
Browse files Browse the repository at this point in the history
  • Loading branch information
arr2036 committed May 13, 2024
1 parent 2113bca commit 3aa3f30
Show file tree
Hide file tree
Showing 9 changed files with 170 additions and 27 deletions.
19 changes: 18 additions & 1 deletion src/listen/bfd/proto_bfd.c
Expand Up @@ -30,14 +30,15 @@

extern fr_app_t proto_bfd;

static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule)
static int auth_type_parse(TALLOC_CTX *ctx, void *out, UNUSED void *parent, CONF_ITEM *ci, conf_parser_t const *rule);

/** How to parse a BFD listen section
*
*/
static conf_parser_t const proto_bfd_config[] = {
{ FR_CONF_OFFSET_TYPE_FLAGS("transport", FR_TYPE_VOID, 0, proto_bfd_t, io.submodule),
.func = virtual_sever_listen_transport_parse },
.func = transport_parse },

CONF_PARSER_TERMINATOR
};
Expand Down Expand Up @@ -82,6 +83,22 @@ fr_dict_attr_autoload_t proto_bfd_dict_attr[] = {
{ NULL }
};

static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule)
{
proto_bfd_t *inst = talloc_get_type_abort(parent, proto_bfd_t);
module_instance_t *mi;

if (unlikely(virtual_sever_listen_transport_parse(ctx, out, parent, ci, rule) < 0)) {
return -1;
}

mi = talloc_get_type_abort(*(void **)out, module_instance_t);
inst->io.app_io = (fr_app_io_t const *)mi->exported;
inst->io.app_io_instance = mi->data;
inst->io.app_io_conf = mi->conf;

return 0;
}
/*
* They all have to be UDP.
*/
Expand Down
21 changes: 20 additions & 1 deletion src/listen/control/proto_control.c
Expand Up @@ -28,6 +28,8 @@

extern fr_app_t proto_control;

static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule);

static conf_parser_t const limit_config[] = {
{ FR_CONF_OFFSET("idle_timeout", proto_control_t, io.idle_timeout), .dflt = "30.0" } ,
{ FR_CONF_OFFSET("nak_lifetime", proto_control_t, io.nak_lifetime), .dflt = "30.0" } ,
Expand All @@ -50,7 +52,7 @@ static conf_parser_t const limit_config[] = {
*/
static conf_parser_t const proto_control_config[] = {
{ FR_CONF_OFFSET_TYPE_FLAGS("transport", FR_TYPE_VOID, 0, proto_control_t, io.submodule),
.func = virtual_sever_listen_transport_parse },
.func = transport_parse },

{ FR_CONF_POINTER("limit", 0, CONF_FLAG_SUBSECTION, NULL), .subcs = (void const *) limit_config },
CONF_PARSER_TERMINATOR
Expand All @@ -64,6 +66,23 @@ fr_dict_autoload_t proto_control_dict[] = {
{ NULL }
};

static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule)
{
proto_control_t *inst = talloc_get_type_abort(parent, proto_control_t);
module_instance_t *mi;

if (unlikely(virtual_sever_listen_transport_parse(ctx, out, parent, ci, rule) < 0)) {
return -1;
}

mi = talloc_get_type_abort(*(void **)out, module_instance_t);
inst->io.app_io = (fr_app_io_t const *)mi->exported;
inst->io.app_io_instance = mi->data;
inst->io.app_io_conf = mi->conf;

return 0;
}

/** Open listen sockets/connect to external event source
*
* @param[in] instance Ctx data for this application.
Expand Down
20 changes: 19 additions & 1 deletion src/listen/cron/proto_cron.c
Expand Up @@ -31,6 +31,7 @@

extern fr_app_t proto_cron;
static int type_parse(TALLOC_CTX *ctx, void *out, UNUSED void *parent, CONF_ITEM *ci, conf_parser_t const *rule);
static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule)

/** How to parse a Load listen section
*
Expand All @@ -39,7 +40,7 @@ static conf_parser_t const proto_cron_config[] = {
{ FR_CONF_OFFSET_TYPE_FLAGS("type", FR_TYPE_VOID, CONF_FLAG_NOT_EMPTY | CONF_FLAG_REQUIRED, proto_cron_t,
type), .func = type_parse },
{ FR_CONF_OFFSET_TYPE_FLAGS("transport", FR_TYPE_VOID, 0, proto_cron_t, io.submodule),
.func = virtual_sever_listen_transport_parse, .dflt = "crontab" },
.func = transport_parse, .dflt = "crontab" },

/*
* Add this as a synonym so normal humans can understand it.
Expand All @@ -57,6 +58,23 @@ static conf_parser_t const proto_cron_config[] = {
CONF_PARSER_TERMINATOR
};

static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule)
{
proto_cron_t *inst = talloc_get_type_abort(parent, proto_cron_t);
module_instance_t *mi;

if (unlikely(virtual_sever_listen_transport_parse(ctx, out, parent, ci, rule) < 0)) {
return -1;
}

mi = talloc_get_type_abort(*(void **)out, module_instance_t);
inst->io.app_io = (fr_app_io_t const *)mi->exported;
inst->io.app_io_instance = mi->data;
inst->io.app_io_conf = mi->conf;

return 0;
}

/** Translates the packet-type into a submodule name
*
* @param[in] ctx to allocate data in (instance of proto_cron).
Expand Down
20 changes: 19 additions & 1 deletion src/listen/dhcpv4/proto_dhcpv4.c
Expand Up @@ -31,6 +31,7 @@

extern fr_app_t proto_dhcpv4;
static int type_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule);
static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule);

static const conf_parser_t priority_config[] = {
{ FR_CONF_OFFSET("Discover", proto_dhcpv4_t, priorities[FR_DHCP_DISCOVER]),
Expand Down Expand Up @@ -75,7 +76,7 @@ static conf_parser_t const limit_config[] = {
static conf_parser_t const proto_dhcpv4_config[] = {
{ FR_CONF_OFFSET_FLAGS("type", CONF_FLAG_NOT_EMPTY, proto_dhcpv4_t, allowed_types), .func = type_parse },
{ FR_CONF_OFFSET_TYPE_FLAGS("transport", FR_TYPE_VOID, 0, proto_dhcpv4_t, io.submodule),
.func = virtual_sever_listen_transport_parse },
.func = transport_parse },

{ FR_CONF_POINTER("limit", 0, CONF_FLAG_SUBSECTION, NULL), .subcs = (void const *) limit_config },

Expand Down Expand Up @@ -135,6 +136,23 @@ static int type_parse(UNUSED TALLOC_CTX *ctx, void *out, void *parent,
return 0;
}

static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule)
{
proto_dhcpv4_t *inst = talloc_get_type_abort(parent, proto_dhcpv4_t);
module_instance_t *mi;

if (unlikely(virtual_sever_listen_transport_parse(ctx, out, parent, ci, rule) < 0)) {
return -1;
}

mi = talloc_get_type_abort(*(void **)out, module_instance_t);
inst->io.app_io = (fr_app_io_t const *)mi->exported;
inst->io.app_io_instance = mi->data;
inst->io.app_io_conf = mi->conf;

return 0;
}

/** Decode the packet
*
*/
Expand Down
20 changes: 19 additions & 1 deletion src/listen/dhcpv6/proto_dhcpv6.c
Expand Up @@ -30,6 +30,7 @@

extern fr_app_t proto_dhcpv6;
static int type_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule);
static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule);

static const conf_parser_t priority_config[] = {
{ FR_CONF_OFFSET("Solicit", proto_dhcpv6_t, priorities[FR_DHCPV6_SOLICIT]),
Expand Down Expand Up @@ -76,7 +77,7 @@ static conf_parser_t const limit_config[] = {
static conf_parser_t const proto_dhcpv6_config[] = {
{ FR_CONF_OFFSET_FLAGS("type", CONF_FLAG_NOT_EMPTY, proto_dhcpv6_t, allowed_types), .func = type_parse },
{ FR_CONF_OFFSET_TYPE_FLAGS("transport", FR_TYPE_VOID, 0, proto_dhcpv6_t, io.submodule),
.func = virtual_sever_listen_transport_parse },
.func = transport_parse },

{ FR_CONF_POINTER("limit", 0, CONF_FLAG_SUBSECTION, NULL), .subcs = (void const *) limit_config },

Expand Down Expand Up @@ -135,6 +136,23 @@ static int type_parse(UNUSED TALLOC_CTX *ctx, void *out, void *parent,
return 0;
}

static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule)
{
proto_dhcpv6_t *inst = talloc_get_type_abort(parent, proto_dhcpv6_t);
module_instance_t *mi;

if (unlikely(virtual_sever_listen_transport_parse(ctx, out, parent, ci, rule) < 0)) {
return -1;
}

mi = talloc_get_type_abort(*(void **)out, module_instance_t);
inst->io.app_io = (fr_app_io_t const *)mi->exported;
inst->io.app_io_instance = mi->data;
inst->io.app_io_conf = mi->conf;

return 0;
}

/** Decode the packet
*
*/
Expand Down
20 changes: 19 additions & 1 deletion src/listen/dns/proto_dns.c
Expand Up @@ -30,6 +30,7 @@

extern fr_app_t proto_dns;
static int type_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule);
static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule)

static const conf_parser_t priority_config[] = {
{ FR_CONF_OFFSET_TYPE_FLAGS("query", FR_TYPE_VOID, 0, proto_dns_t, priorities[FR_DNS_QUERY]),
Expand Down Expand Up @@ -59,7 +60,7 @@ static conf_parser_t const limit_config[] = {
static conf_parser_t const proto_dns_config[] = {
{ FR_CONF_OFFSET_FLAGS("type", CONF_FLAG_NOT_EMPTY, proto_dns_t, allowed_types), .func = type_parse },
{ FR_CONF_OFFSET_TYPE_FLAGS("transport", FR_TYPE_VOID, 0, proto_dns_t, io.submodule),
.func = virtual_sever_listen_transport_parse },
.func = transport_parse },

{ FR_CONF_POINTER("limit", 0, CONF_FLAG_SUBSECTION, NULL), .subcs = (void const *) limit_config },

Expand Down Expand Up @@ -116,6 +117,23 @@ static int type_parse(UNUSED TALLOC_CTX *ctx, void *out, void *parent,
return 0;
}

static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule)
{
proto_dns_t *inst = talloc_get_type_abort(parent, proto_dns_t);
module_instance_t *mi;

if (unlikely(virtual_sever_listen_transport_parse(ctx, out, parent, ci, rule) < 0)) {
return -1;
}

mi = talloc_get_type_abort(*(void **)out, module_instance_t);
inst->io.app_io = (fr_app_io_t const *)mi->exported;
inst->io.app_io_instance = mi->data;
inst->io.app_io_conf = mi->conf;

return 0;
}

/** Decode the packet
*
*/
Expand Down
20 changes: 19 additions & 1 deletion src/listen/load/proto_load.c
Expand Up @@ -31,6 +31,7 @@

extern fr_app_t proto_load;
static int type_parse(TALLOC_CTX *ctx, void *out, UNUSED void *parent, CONF_ITEM *ci, conf_parser_t const *rule);
static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule);

/** How to parse a Load listen section
*
Expand All @@ -39,7 +40,7 @@ static conf_parser_t const proto_load_config[] = {
{ FR_CONF_OFFSET_TYPE_FLAGS("type", FR_TYPE_VOID, CONF_FLAG_NOT_EMPTY | CONF_FLAG_REQUIRED, proto_load_t,
type), .func = type_parse },
{ FR_CONF_OFFSET_TYPE_FLAGS("transport", FR_TYPE_VOID, 0, proto_load_t, io.submodule),
.func = virtual_sever_listen_transport_parse, .dflt = "step" },
.func = transport_parse, .dflt = "step" },

/*
* Add this as a synonym so normal humans can understand it.
Expand Down Expand Up @@ -104,6 +105,23 @@ static int type_parse(UNUSED TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM
return 0;
}

static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule)
{
proto_load_t *inst = talloc_get_type_abort(parent, proto_load_t);
module_instance_t *mi;

if (unlikely(virtual_sever_listen_transport_parse(ctx, out, parent, ci, rule) < 0)) {
return -1;
}

mi = talloc_get_type_abort(*(void **)out, module_instance_t);
inst->io.app_io = (fr_app_io_t const *)mi->exported;
inst->io.app_io_instance = mi->data;
inst->io.app_io_conf = mi->conf;

return 0;
}

/** Decode the packet, and set the request->process function
*
*/
Expand Down
34 changes: 17 additions & 17 deletions src/listen/radius/proto_radius.c
Expand Up @@ -86,23 +86,6 @@ static conf_parser_t const proto_radius_config[] = {
CONF_PARSER_TERMINATOR
};

static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule)
{
proto_radius_t *inst = talloc_get_type_abort(parent, proto_radius_t);
module_instance_t *mi;

if (unlikely(virtual_sever_listen_transport_parse(ctx, out, parent, ci, rule) < 0)) {
return -1;
}

mi = talloc_get_type_abort(*(void **)out, module_instance_t);
inst->io.app_io = (fr_app_io_t const *)mi->exported;
inst->io.app_io_instance = mi->data;
inst->io.app_io_conf = mi->conf;

return 0;
}

static fr_dict_t const *dict_radius;

extern fr_dict_autoload_t proto_radius_dict[];
Expand Down Expand Up @@ -159,6 +142,23 @@ static int type_parse(UNUSED TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM
return 0;
}

static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule)
{
proto_radius_t *inst = talloc_get_type_abort(parent, proto_radius_t);
module_instance_t *mi;

if (unlikely(virtual_sever_listen_transport_parse(ctx, out, parent, ci, rule) < 0)) {
return -1;
}

mi = talloc_get_type_abort(*(void **)out, module_instance_t);
inst->io.app_io = (fr_app_io_t const *)mi->exported;
inst->io.app_io_instance = mi->data;
inst->io.app_io_conf = mi->conf;

return 0;
}

/** Decode the packet
*
*/
Expand Down
23 changes: 20 additions & 3 deletions src/listen/vmps/proto_vmps.c
Expand Up @@ -30,8 +30,8 @@
#include "proto_vmps.h"

extern fr_app_t proto_vmps;
static int type_parse(TALLOC_CTX *ctx, void *out, void *parent,
CONF_ITEM *ci, conf_parser_t const *rule);
static int type_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule);
static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule);

static const conf_parser_t priority_config[] = {
{ FR_CONF_OFFSET("Join-Request", proto_vmps_t, priorities[FR_PACKET_TYPE_VALUE_JOIN_REQUEST]),
Expand Down Expand Up @@ -64,7 +64,7 @@ static conf_parser_t const limit_config[] = {
*/
static conf_parser_t const proto_vmps_config[] = {
{ FR_CONF_OFFSET_FLAGS("type", CONF_FLAG_NOT_EMPTY, proto_vmps_t, allowed_types), .func = type_parse },
{ FR_CONF_OFFSET_TYPE_FLAGS("transport", FR_TYPE_VOID, 0, proto_vmps_t, io.submodule), .func = virtual_sever_listen_transport_parse },
{ FR_CONF_OFFSET_TYPE_FLAGS("transport", FR_TYPE_VOID, 0, proto_vmps_t, io.submodule), .func = transport_parse },

{ FR_CONF_POINTER("limit", 0, CONF_FLAG_SUBSECTION, NULL), .subcs = (void const *) limit_config },
{ FR_CONF_POINTER("priority", 0, CONF_FLAG_SUBSECTION, NULL), .subcs = (void const *) priority_config },
Expand Down Expand Up @@ -121,6 +121,23 @@ static int type_parse(UNUSED TALLOC_CTX *ctx, void *out, void *parent,
return 0;
}

static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule)
{
proto_vmps_t *inst = talloc_get_type_abort(parent, proto_vmps_t);
module_instance_t *mi;

if (unlikely(virtual_sever_listen_transport_parse(ctx, out, parent, ci, rule) < 0)) {
return -1;
}

mi = talloc_get_type_abort(*(void **)out, module_instance_t);
inst->io.app_io = (fr_app_io_t const *)mi->exported;
inst->io.app_io_instance = mi->data;
inst->io.app_io_conf = mi->conf;

return 0;
}

/** Decode the packet
*
*/
Expand Down

0 comments on commit 3aa3f30

Please sign in to comment.