owner = &Client-Hardware-Address
# owner = "%{%{Client-Identifier}:-%{Client-Hardware-Address}}"
# owner = "%{Vendor-Specific.ADSL-Forum.Agent-Circuit-ID} %{Calling-Station-Id}"
- requested_address = "%{%{Requested-IP-Address}:-%{Client-IP-Address}}"
+ requested_address = "%{%{Requested-IP-Address}:-%{Packet-Src-IP-Address}}"
# ipv4_integer = yes
allocated_address_attr = &reply.Your-IP-Address
range_attr = &reply.IP-Pool.Range
pool {
start = 0
min = 0
-# max =
+# max = 1
spare = 1
uses = 0
lifetime = 0
following value:
----------------------------------------------------------------
-filename = ${radacctdir}/%{Client-IP-Address}/detail-%Y%m%d
+filename = ${radacctdir}/%{Packet-Src-IP-Address}/detail-%Y%m%d
----------------------------------------------------------------
The configuration entry is composed of two kinds of variable expansion.
#
# requested_address:: The IP address being renewed or released.
#
- requested_address = "%{%{Requested-IP-Address}:-%{Client-IP-Address}}"
+ requested_address = "%{%{Requested-IP-Address}:-%{Packet-Src-IP-Address}}"
#
# ipv4_integer:: Whether IPv4 addresses should be cast to integers, for renew operations.
ATTRIBUTE Acct-Session-Start-Time 1019 date
ATTRIBUTE Acct-Unique-Session-Id 1020 string
-ATTRIBUTE Client-IP-Address 1021 ipaddr virtual
+# 1021 was Client-IP-Address. Just use Packet-Src-IP-Address
ATTRIBUTE LDAP-UserDN 1022 string
ATTRIBUTE SQL-User-Name 1023 string
};
static fr_dict_attr_t const *attr_auth_type;
-static fr_dict_attr_t const *attr_client_ip_address;
static fr_dict_attr_t const *attr_crypt_password;
static fr_dict_attr_t const *attr_packet_dst_ip_address;
static fr_dict_attr_t const *attr_packet_dst_ipv6_address;
extern fr_dict_attr_autoload_t paircmp_dict_attr[];
fr_dict_attr_autoload_t paircmp_dict_attr[] = {
- { .out = &attr_client_ip_address, .name = "Client-IP-Address", .type = FR_TYPE_IPV4_ADDR, .dict = &dict_freeradius },
{ .out = &attr_crypt_password, .name = "Password.Crypt", .type = FR_TYPE_STRING, .dict = &dict_freeradius },
{ .out = &attr_packet_dst_ip_address, .name = "Packet-Dst-IP-Address", .type = FR_TYPE_IPV4_ADDR, .dict = &dict_freeradius },
{ .out = &attr_packet_dst_ipv6_address, .name = "Packet-Dst-IPv6-Address", .type = FR_TYPE_IPV6_ADDR, .dict = &dict_freeradius },
paircmp_register(attr_packet_type, NULL, true, packet_cmp, NULL);
- paircmp_register(attr_client_ip_address, NULL, true, generic_cmp, NULL);
paircmp_register(attr_packet_src_ip_address, NULL, true, generic_cmp, NULL);
paircmp_register(attr_packet_dst_ip_address, NULL, true, generic_cmp, NULL);
paircmp_register(attr_packet_src_port, NULL, true, generic_cmp, NULL);
{
paircmp_unregister(attr_packet_type, packet_cmp);
- paircmp_unregister(attr_client_ip_address, generic_cmp);
paircmp_unregister(attr_packet_src_ip_address, generic_cmp);
paircmp_unregister(attr_packet_dst_ip_address, generic_cmp);
paircmp_unregister(attr_packet_src_port, generic_cmp);
{ NULL }
};
-static fr_dict_attr_t const *attr_client_ip_address;
static fr_dict_attr_t const *attr_client_shortname;
static fr_dict_attr_t const *attr_packet_dst_ip_address;
static fr_dict_attr_t const *attr_packet_dst_ipv6_address;
fr_dict_attr_t const *tmpl_attr_unspec;
static fr_dict_attr_autoload_t tmpl_dict_attr[] = {
- { .out = &attr_client_ip_address, .name = "Client-IP-Address", .type = FR_TYPE_IPV4_ADDR, .dict = &dict_freeradius },
{ .out = &attr_client_shortname, .name = "Client-Shortname", .type = FR_TYPE_STRING, .dict = &dict_freeradius },
{ .out = &attr_module_return_code, .name = "Module-Return-Code", .type = FR_TYPE_UINT32, .dict = &dict_freeradius },
{ .out = &attr_packet_dst_ip_address, .name = "Packet-Dst-IP-Address", .type = FR_TYPE_IPV4_ADDR, .dict = &dict_freeradius },
MEM(value = fr_value_box_alloc_null(ctx));
fr_value_box_memdup(ctx, value, tmpl_attr_tail_da(vpt), packet->vector, sizeof(packet->vector), true);
- } else if (tmpl_attr_tail_da(vpt) == attr_client_ip_address) {
- fr_client_t *client = client_from_request(request);
- if (client) {
- MEM(value = fr_value_box_alloc_null(ctx));
- fr_value_box_ipaddr(value, NULL, &client->ipaddr, false); /* Enum might not match type */
- goto done;
- }
- goto src_ip_address;
-
} else if (tmpl_attr_tail_da(vpt) == attr_packet_src_ip_address) {
- src_ip_address:
if (!fr_socket_is_inet(packet->socket.proto) ||
(packet->socket.inet.src_ipaddr.af != AF_INET)) return 0;
{ FR_CALL_ENV_OFFSET("lease_time", FR_TYPE_UINT32, redis_ippool_alloc_call_env_t, lease_time,
NULL, T_INVALID, true, false, false) },
{ FR_CALL_ENV_OFFSET("requested_address", FR_TYPE_STRING, redis_ippool_alloc_call_env_t, requested_address,
- "%{%{Requested-IP-Address}:-%{Client-IP-Address}}", T_DOUBLE_QUOTED_STRING,
+ "%{%{Requested-IP-Address}:-%{Packet-Src-IP-Address}}", T_DOUBLE_QUOTED_STRING,
true, true, false) },
{ FR_CALL_ENV_TMPL_ONLY_OFFSET("allocated_address_attr", FR_TYPE_ATTRIBUTE, redis_ippool_alloc_call_env_t,
allocated_address_attr, NULL, T_INVALID, true ) },
{ FR_CALL_ENV_OFFSET("lease_time", FR_TYPE_UINT32, redis_ippool_update_call_env_t, lease_time,
NULL, T_INVALID, true, false, false) },
{ FR_CALL_ENV_OFFSET("requested_address", FR_TYPE_STRING, redis_ippool_update_call_env_t, requested_address,
- "%{%{Requested-IP-Address}:-%{Client-IP-Address}}", T_DOUBLE_QUOTED_STRING,
+ "%{%{Requested-IP-Address}:-%{Packet-Src-IP-Address}}", T_DOUBLE_QUOTED_STRING,
true, true, false) },
{ FR_CALL_ENV_TMPL_ONLY_OFFSET("allocated_address_attr", FR_TYPE_ATTRIBUTE, redis_ippool_update_call_env_t,
allocated_address_attr, NULL, T_INVALID, true ) },
{ FR_CALL_ENV_OFFSET("gateway", FR_TYPE_STRING, redis_ippool_release_call_env_t, gateway_id,
"", T_SINGLE_QUOTED_STRING, false, true, true ) },
{ FR_CALL_ENV_OFFSET("requested_address", FR_TYPE_STRING, redis_ippool_release_call_env_t, requested_address,
- "%{%{Requested-IP-Address}:-%{Client-IP-Address}}", T_DOUBLE_QUOTED_STRING,
+ "%{%{Requested-IP-Address}:-%{Packet-Src-IP-Address}}", T_DOUBLE_QUOTED_STRING,
true, true, false) },
CALL_ENV_TERMINATOR
};
test_fail
}
-if (!("%{Client-IP-Address}" == 127.0.0.1)) {
- test_fail
-}
-
if (!("%{Packet-Src-IP-Address}" == 127.0.0.1)) {
test_fail
}
match \"%t\tfoo\"
allow-unresolved yes
-xlat \"%t\t%{Client-IP-Address}\"
-match \"%t\t%{Client-IP-Address}\"
+xlat \"%t\t%{Packet-Src-IP-Address}\"
+match \"%t\t%{Packet-Src-IP-Address}\"
allow-unresolved no
xlat \"foo %{test:foo}\"