Support the following RFC dictionaries

- RFC4603
- RFC4675
- RFC4818
- RFC4849
- RFC5176
- RFC6911
- RFC7055
- RFC7155
This commit is contained in:
moznion
2020-12-06 16:09:03 +09:00
parent bece870914
commit 2b6b80a83e
19 changed files with 518 additions and 10 deletions

View File

@@ -20,10 +20,18 @@ This supports the following RFC dictionaries at the moment:
- [RFC3580](https://tools.ietf.org/html/rfc3580)
- [RFC4072](https://tools.ietf.org/html/rfc4072)
- [RFC4372](https://tools.ietf.org/html/rfc4372)
- [RFC4603](https://tools.ietf.org/html/rfc4603)
- [RFC4675](https://tools.ietf.org/html/rfc4675)
- [RFC4818](https://tools.ietf.org/html/rfc4818)
- [RFC4849](https://tools.ietf.org/html/rfc4849)
- [RFC5090](https://tools.ietf.org/html/rfc5090)
- [RFC5176](https://tools.ietf.org/html/rfc5176)
- [RFC5607](https://tools.ietf.org/html/rfc5607)
- [RFC6519](https://tools.ietf.org/html/rfc6519)
- [RFC6677](https://tools.ietf.org/html/rfc6677)
- [RFC6911](https://tools.ietf.org/html/rfc6911)
- [RFC7055](https://tools.ietf.org/html/rfc7055)
- [RFC7155](https://tools.ietf.org/html/rfc7155)
## Usage
@@ -36,21 +44,13 @@ Simple example implementations are here:
- retransmission feature on the client
- Support the following RFC dictionaries:
- rfc4603
- rfc4675
- rfc4679
- rfc4818
- rfc4849
- rfc5176
- rfc5447
- rfc5580
- rfc5904
- rfc6572
- rfc6911
- rfc6929
- rfc6930
- rfc7055
- rfc7155
- rfc7268
- rfc7499
- rfc7930

19
dicts/dictionary.rfc4603 Normal file
View File

@@ -0,0 +1,19 @@
# -*- text -*-
# Copyright (C) 2020 The FreeRADIUS Server project and contributors
# This work is licensed under CC-BY version 4.0 https://creativecommons.org/licenses/by/4.0
# Version $Id$
##############################################################################
#
# Attributes and values defined in RFC 4603.
# http://www.ietf.org/rfc/rfc4603.txt
#
# $Id$
#
##############################################################################
VALUE NAS-Port-Type PPPoA 30
VALUE NAS-Port-Type PPPoEoA 31
VALUE NAS-Port-Type PPPoEoE 32
VALUE NAS-Port-Type PPPoEoVLAN 33
VALUE NAS-Port-Type PPPoEoQinQ 34

31
dicts/dictionary.rfc4675 Normal file
View File

@@ -0,0 +1,31 @@
# -*- text -*-
# Copyright (C) 2020 The FreeRADIUS Server project and contributors
# This work is licensed under CC-BY version 4.0 https://creativecommons.org/licenses/by/4.0
# Version $Id$
#
# Attributes and values defined in RFC 4675.
# http://www.ietf.org/rfc/rfc4675.txt
#
# $Id$
#
#
# High byte = '1' (0x31) means the frames are tagged.
# High byte = '2' (0x32) means the frames are untagged.
#
# Next 12 bits MUST be zero.
#
# Lower 12 bits is the IEEE-802.1Q VLAN VID.
#
ATTRIBUTE Egress-VLANID 56 integer
ATTRIBUTE Ingress-Filters 57 integer
#
# First byte == '1' (0x31) means that the frames are tagged.
# First byte == '2' (0x32) means that the frames are untagged.
#
ATTRIBUTE Egress-VLAN-Name 58 string
ATTRIBUTE User-Priority-Table 59 octets
VALUE Ingress-Filters Enabled 1
VALUE Ingress-Filters Disabled 2

14
dicts/dictionary.rfc4818 Normal file
View File

@@ -0,0 +1,14 @@
# -*- text -*-
# Copyright (C) 2020 The FreeRADIUS Server project and contributors
# This work is licensed under CC-BY version 4.0 https://creativecommons.org/licenses/by/4.0
# Version $Id$
##############################################################################
#
# Attributes and values defined in RFC 4818.
# http://www.ietf.org/rfc/rfc4818.txt
#
# $Id$
#
##############################################################################
ATTRIBUTE Delegated-IPv6-Prefix 123 ipv6prefix

11
dicts/dictionary.rfc4849 Normal file
View File

@@ -0,0 +1,11 @@
# -*- text -*-
# Copyright (C) 2020 The FreeRADIUS Server project and contributors
# This work is licensed under CC-BY version 4.0 https://creativecommons.org/licenses/by/4.0
# Version $Id$
#
# Attributes and values defined in RFC 4849.
# http://www.ietf.org/rfc/rfc4849.txt
#
# $Id$
#
ATTRIBUTE NAS-Filter-Rule 92 string

12
dicts/dictionary.rfc5176 Normal file
View File

@@ -0,0 +1,12 @@
# -*- text -*-
# Copyright (C) 2020 The FreeRADIUS Server project and contributors
# This work is licensed under CC-BY version 4.0 https://creativecommons.org/licenses/by/4.0
# Version $Id$
#
# Attributes and values defined in RFC 5176.
# http://www.ietf.org/rfc/rfc5176.txt
#
# $Id$
#
VALUE Error-Cause Invalid-Attribute-Value 407
VALUE Error-Cause Multiple-Session-Selection-Unsupported 508

14
dicts/dictionary.rfc6911 Normal file
View File

@@ -0,0 +1,14 @@
# -*- text -*-
# Copyright (C) 2020 The FreeRADIUS Server project and contributors
# This work is licensed under CC-BY version 4.0 https://creativecommons.org/licenses/by/4.0
# Version $Id$
#
# Attributes and values defined in RFC 6911
# http://www.ietf.org/rfc/rfc6911.txt
#
ATTRIBUTE Framed-IPv6-Address 168 ipv6addr
ATTRIBUTE DNS-Server-IPv6-Address 169 ipv6addr
ATTRIBUTE Route-IPv6-Information 170 ipv6prefix
ATTRIBUTE Delegated-IPv6-Prefix-Pool 171 string
ATTRIBUTE Stateful-IPv6-Address-Pool 172 string

13
dicts/dictionary.rfc7055 Normal file
View File

@@ -0,0 +1,13 @@
# -*- text -*-
# Copyright (C) 2020 The FreeRADIUS Server project and contributors
# This work is licensed under CC-BY version 4.0 https://creativecommons.org/licenses/by/4.0
# Version $Id$
#
# Attributes and values defined in RFC 7055
# http://www.ietf.org/rfc/rfc7055.txt
#
ATTRIBUTE GSS-Acceptor-Service-Name 164 string
ATTRIBUTE GSS-Acceptor-Host-Name 165 string
ATTRIBUTE GSS-Acceptor-Service-Specifics 166 string
ATTRIBUTE GSS-Acceptor-Realm-Name 167 string

13
dicts/dictionary.rfc7155 Normal file
View File

@@ -0,0 +1,13 @@
# -*- text -*-
# Copyright (C) 2020 The FreeRADIUS Server project and contributors
# This work is licensed under CC-BY version 4.0 https://creativecommons.org/licenses/by/4.0
# Version $Id$
#
# Attributes and values defined in RFC 7155
# http://www.ietf.org/rfc/rfc7155.txt
#
# The Value field contains two octets (00 - 99). ANSI T1.113 and
# BELLCORE 394 can be used for additional information about these
# values and their use.
ATTRIBUTE Originating-Line-Info 94 octets[2]

View File

@@ -13,8 +13,16 @@ pub mod rfc3576;
pub mod rfc3580;
pub mod rfc4072;
pub mod rfc4372;
pub mod rfc4603;
pub mod rfc4675;
pub mod rfc4818;
pub mod rfc4849;
pub mod rfc5090;
pub mod rfc5176;
pub mod rfc5607;
pub mod rfc6519;
pub mod rfc6677;
pub mod rfc6911;
pub mod rfc7055;
pub mod rfc7155;
pub mod tag;

8
radius/src/rfc4603.rs Normal file
View File

@@ -0,0 +1,8 @@
// Code generated by machine generator; DO NOT EDIT.
pub type NasPortType = u32;
pub const NAS_PORT_TYPE_PP_PO_A: NasPortType = 30;
pub const NAS_PORT_TYPE_PP_PO_EO_A: NasPortType = 31;
pub const NAS_PORT_TYPE_PP_PO_EO_E: NasPortType = 32;
pub const NAS_PORT_TYPE_PP_PO_EO_VLAN: NasPortType = 33;
pub const NAS_PORT_TYPE_PP_PO_EO_QIN_Q: NasPortType = 34;

86
radius/src/rfc4675.rs Normal file
View File

@@ -0,0 +1,86 @@
// Code generated by machine generator; DO NOT EDIT.
use crate::avp::{AVPError, AVPType, AVP};
use crate::packet::Packet;
pub type IngressFilters = u32;
pub const INGRESS_FILTERS_ENABLED: IngressFilters = 1;
pub const INGRESS_FILTERS_DISABLED: IngressFilters = 2;
pub const EGRESS_VLANID_TYPE: AVPType = 56;
pub fn delete_egress_vlanid(packet: &mut Packet) {
packet.delete(EGRESS_VLANID_TYPE);
}
pub fn add_egress_vlanid(packet: &mut Packet, value: u32) {
packet.add(AVP::from_u32(EGRESS_VLANID_TYPE, value));
}
pub fn lookup_egress_vlanid(packet: &Packet) -> Option<Result<u32, AVPError>> {
packet.lookup(EGRESS_VLANID_TYPE).map(|v| v.encode_u32())
}
pub fn lookup_all_egress_vlanid(packet: &Packet) -> Result<Vec<u32>, AVPError> {
let mut vec = Vec::new();
for avp in packet.lookup_all(EGRESS_VLANID_TYPE) {
vec.push(avp.encode_u32()?)
}
Ok(vec)
}
pub const INGRESS_FILTERS_TYPE: AVPType = 57;
pub fn delete_ingress_filters(packet: &mut Packet) {
packet.delete(INGRESS_FILTERS_TYPE);
}
pub fn add_ingress_filters(packet: &mut Packet, value: IngressFilters) {
packet.add(AVP::from_u32(INGRESS_FILTERS_TYPE, value as u32));
}
pub fn lookup_ingress_filters(packet: &Packet) -> Option<Result<IngressFilters, AVPError>> {
packet
.lookup(INGRESS_FILTERS_TYPE)
.map(|v| Ok(v.encode_u32()? as IngressFilters))
}
pub fn lookup_all_ingress_filters(packet: &Packet) -> Result<Vec<IngressFilters>, AVPError> {
let mut vec = Vec::new();
for avp in packet.lookup_all(INGRESS_FILTERS_TYPE) {
vec.push(avp.encode_u32()? as IngressFilters)
}
Ok(vec)
}
pub const EGRESS_VLAN_NAME_TYPE: AVPType = 58;
pub fn delete_egress_vlan_name(packet: &mut Packet) {
packet.delete(EGRESS_VLAN_NAME_TYPE);
}
pub fn add_egress_vlan_name(packet: &mut Packet, value: &str) {
packet.add(AVP::from_string(EGRESS_VLAN_NAME_TYPE, value));
}
pub fn lookup_egress_vlan_name(packet: &Packet) -> Option<Result<String, AVPError>> {
packet
.lookup(EGRESS_VLAN_NAME_TYPE)
.map(|v| v.encode_string())
}
pub fn lookup_all_egress_vlan_name(packet: &Packet) -> Result<Vec<String>, AVPError> {
let mut vec = Vec::new();
for avp in packet.lookup_all(EGRESS_VLAN_NAME_TYPE) {
vec.push(avp.encode_string()?)
}
Ok(vec)
}
pub const USER_PRIORITY_TABLE_TYPE: AVPType = 59;
pub fn delete_user_priority_table(packet: &mut Packet) {
packet.delete(USER_PRIORITY_TABLE_TYPE);
}
pub fn add_user_priority_table(packet: &mut Packet, value: &[u8]) {
packet.add(AVP::from_bytes(USER_PRIORITY_TABLE_TYPE, value));
}
pub fn lookup_user_priority_table(packet: &Packet) -> Option<Vec<u8>> {
packet
.lookup(USER_PRIORITY_TABLE_TYPE)
.map(|v| v.encode_bytes())
}
pub fn lookup_all_user_priority_table(packet: &Packet) -> Vec<Vec<u8>> {
let mut vec = Vec::new();
for avp in packet.lookup_all(USER_PRIORITY_TABLE_TYPE) {
vec.push(avp.encode_bytes())
}
vec
}

25
radius/src/rfc4818.rs Normal file
View File

@@ -0,0 +1,25 @@
// Code generated by machine generator; DO NOT EDIT.
use crate::avp::{AVPError, AVPType, AVP};
use crate::packet::Packet;
pub const DELEGATED_I_PV_6_PREFIX_TYPE: AVPType = 123;
pub fn delete_delegated_i_pv_6_prefix(packet: &mut Packet) {
packet.delete(DELEGATED_I_PV_6_PREFIX_TYPE);
}
pub fn add_delegated_i_pv_6_prefix(packet: &mut Packet, value: &[u8]) -> Result<(), AVPError> {
packet.add(AVP::from_ipv6_prefix(DELEGATED_I_PV_6_PREFIX_TYPE, value)?);
Ok(())
}
pub fn lookup_delegated_i_pv_6_prefix(packet: &Packet) -> Option<Result<Vec<u8>, AVPError>> {
packet
.lookup(DELEGATED_I_PV_6_PREFIX_TYPE)
.map(|v| v.encode_ipv6_prefix())
}
pub fn lookup_all_delegated_i_pv_6_prefix(packet: &Packet) -> Result<Vec<Vec<u8>>, AVPError> {
let mut vec = Vec::new();
for avp in packet.lookup_all(DELEGATED_I_PV_6_PREFIX_TYPE) {
vec.push(avp.encode_ipv6_prefix()?)
}
Ok(vec)
}

24
radius/src/rfc4849.rs Normal file
View File

@@ -0,0 +1,24 @@
// Code generated by machine generator; DO NOT EDIT.
use crate::avp::{AVPError, AVPType, AVP};
use crate::packet::Packet;
pub const NAS_FILTER_RULE_TYPE: AVPType = 92;
pub fn delete_nas_filter_rule(packet: &mut Packet) {
packet.delete(NAS_FILTER_RULE_TYPE);
}
pub fn add_nas_filter_rule(packet: &mut Packet, value: &str) {
packet.add(AVP::from_string(NAS_FILTER_RULE_TYPE, value));
}
pub fn lookup_nas_filter_rule(packet: &Packet) -> Option<Result<String, AVPError>> {
packet
.lookup(NAS_FILTER_RULE_TYPE)
.map(|v| v.encode_string())
}
pub fn lookup_all_nas_filter_rule(packet: &Packet) -> Result<Vec<String>, AVPError> {
let mut vec = Vec::new();
for avp in packet.lookup_all(NAS_FILTER_RULE_TYPE) {
vec.push(avp.encode_string()?)
}
Ok(vec)
}

5
radius/src/rfc5176.rs Normal file
View File

@@ -0,0 +1,5 @@
// Code generated by machine generator; DO NOT EDIT.
pub type ErrorCause = u32;
pub const ERROR_CAUSE_INVALID_ATTRIBUTE_VALUE: ErrorCause = 407;
pub const ERROR_CAUSE_MULTIPLE_SESSION_SELECTION_UNSUPPORTED: ErrorCause = 508;

107
radius/src/rfc6911.rs Normal file
View File

@@ -0,0 +1,107 @@
// Code generated by machine generator; DO NOT EDIT.
use std::net::Ipv6Addr;
use crate::avp::{AVPError, AVPType, AVP};
use crate::packet::Packet;
pub const FRAMED_I_PV_6_ADDRESS_TYPE: AVPType = 168;
pub fn delete_framed_i_pv_6_address(packet: &mut Packet) {
packet.delete(FRAMED_I_PV_6_ADDRESS_TYPE);
}
pub fn add_framed_i_pv_6_address(packet: &mut Packet, value: &Ipv6Addr) {
packet.add(AVP::from_ipv6(FRAMED_I_PV_6_ADDRESS_TYPE, value));
}
pub fn lookup_framed_i_pv_6_address(packet: &Packet) -> Option<Result<Ipv6Addr, AVPError>> {
packet
.lookup(FRAMED_I_PV_6_ADDRESS_TYPE)
.map(|v| v.encode_ipv6())
}
pub fn lookup_all_framed_i_pv_6_address(packet: &Packet) -> Result<Vec<Ipv6Addr>, AVPError> {
let mut vec = Vec::new();
for avp in packet.lookup_all(FRAMED_I_PV_6_ADDRESS_TYPE) {
vec.push(avp.encode_ipv6()?)
}
Ok(vec)
}
pub const DNS_SERVER_I_PV_6_ADDRESS_TYPE: AVPType = 169;
pub fn delete_dns_server_i_pv_6_address(packet: &mut Packet) {
packet.delete(DNS_SERVER_I_PV_6_ADDRESS_TYPE);
}
pub fn add_dns_server_i_pv_6_address(packet: &mut Packet, value: &Ipv6Addr) {
packet.add(AVP::from_ipv6(DNS_SERVER_I_PV_6_ADDRESS_TYPE, value));
}
pub fn lookup_dns_server_i_pv_6_address(packet: &Packet) -> Option<Result<Ipv6Addr, AVPError>> {
packet
.lookup(DNS_SERVER_I_PV_6_ADDRESS_TYPE)
.map(|v| v.encode_ipv6())
}
pub fn lookup_all_dns_server_i_pv_6_address(packet: &Packet) -> Result<Vec<Ipv6Addr>, AVPError> {
let mut vec = Vec::new();
for avp in packet.lookup_all(DNS_SERVER_I_PV_6_ADDRESS_TYPE) {
vec.push(avp.encode_ipv6()?)
}
Ok(vec)
}
pub const ROUTE_I_PV_6_INFORMATION_TYPE: AVPType = 170;
pub fn delete_route_i_pv_6_information(packet: &mut Packet) {
packet.delete(ROUTE_I_PV_6_INFORMATION_TYPE);
}
pub fn add_route_i_pv_6_information(packet: &mut Packet, value: &[u8]) -> Result<(), AVPError> {
packet.add(AVP::from_ipv6_prefix(ROUTE_I_PV_6_INFORMATION_TYPE, value)?);
Ok(())
}
pub fn lookup_route_i_pv_6_information(packet: &Packet) -> Option<Result<Vec<u8>, AVPError>> {
packet
.lookup(ROUTE_I_PV_6_INFORMATION_TYPE)
.map(|v| v.encode_ipv6_prefix())
}
pub fn lookup_all_route_i_pv_6_information(packet: &Packet) -> Result<Vec<Vec<u8>>, AVPError> {
let mut vec = Vec::new();
for avp in packet.lookup_all(ROUTE_I_PV_6_INFORMATION_TYPE) {
vec.push(avp.encode_ipv6_prefix()?)
}
Ok(vec)
}
pub const DELEGATED_I_PV_6_PREFIX_POOL_TYPE: AVPType = 171;
pub fn delete_delegated_i_pv_6_prefix_pool(packet: &mut Packet) {
packet.delete(DELEGATED_I_PV_6_PREFIX_POOL_TYPE);
}
pub fn add_delegated_i_pv_6_prefix_pool(packet: &mut Packet, value: &str) {
packet.add(AVP::from_string(DELEGATED_I_PV_6_PREFIX_POOL_TYPE, value));
}
pub fn lookup_delegated_i_pv_6_prefix_pool(packet: &Packet) -> Option<Result<String, AVPError>> {
packet
.lookup(DELEGATED_I_PV_6_PREFIX_POOL_TYPE)
.map(|v| v.encode_string())
}
pub fn lookup_all_delegated_i_pv_6_prefix_pool(packet: &Packet) -> Result<Vec<String>, AVPError> {
let mut vec = Vec::new();
for avp in packet.lookup_all(DELEGATED_I_PV_6_PREFIX_POOL_TYPE) {
vec.push(avp.encode_string()?)
}
Ok(vec)
}
pub const STATEFUL_I_PV_6_ADDRESS_POOL_TYPE: AVPType = 172;
pub fn delete_stateful_i_pv_6_address_pool(packet: &mut Packet) {
packet.delete(STATEFUL_I_PV_6_ADDRESS_POOL_TYPE);
}
pub fn add_stateful_i_pv_6_address_pool(packet: &mut Packet, value: &str) {
packet.add(AVP::from_string(STATEFUL_I_PV_6_ADDRESS_POOL_TYPE, value));
}
pub fn lookup_stateful_i_pv_6_address_pool(packet: &Packet) -> Option<Result<String, AVPError>> {
packet
.lookup(STATEFUL_I_PV_6_ADDRESS_POOL_TYPE)
.map(|v| v.encode_string())
}
pub fn lookup_all_stateful_i_pv_6_address_pool(packet: &Packet) -> Result<Vec<String>, AVPError> {
let mut vec = Vec::new();
for avp in packet.lookup_all(STATEFUL_I_PV_6_ADDRESS_POOL_TYPE) {
vec.push(avp.encode_string()?)
}
Ok(vec)
}

84
radius/src/rfc7055.rs Normal file
View File

@@ -0,0 +1,84 @@
// Code generated by machine generator; DO NOT EDIT.
use crate::avp::{AVPError, AVPType, AVP};
use crate::packet::Packet;
pub const GSS_ACCEPTOR_SERVICE_NAME_TYPE: AVPType = 164;
pub fn delete_gss_acceptor_service_name(packet: &mut Packet) {
packet.delete(GSS_ACCEPTOR_SERVICE_NAME_TYPE);
}
pub fn add_gss_acceptor_service_name(packet: &mut Packet, value: &str) {
packet.add(AVP::from_string(GSS_ACCEPTOR_SERVICE_NAME_TYPE, value));
}
pub fn lookup_gss_acceptor_service_name(packet: &Packet) -> Option<Result<String, AVPError>> {
packet
.lookup(GSS_ACCEPTOR_SERVICE_NAME_TYPE)
.map(|v| v.encode_string())
}
pub fn lookup_all_gss_acceptor_service_name(packet: &Packet) -> Result<Vec<String>, AVPError> {
let mut vec = Vec::new();
for avp in packet.lookup_all(GSS_ACCEPTOR_SERVICE_NAME_TYPE) {
vec.push(avp.encode_string()?)
}
Ok(vec)
}
pub const GSS_ACCEPTOR_HOST_NAME_TYPE: AVPType = 165;
pub fn delete_gss_acceptor_host_name(packet: &mut Packet) {
packet.delete(GSS_ACCEPTOR_HOST_NAME_TYPE);
}
pub fn add_gss_acceptor_host_name(packet: &mut Packet, value: &str) {
packet.add(AVP::from_string(GSS_ACCEPTOR_HOST_NAME_TYPE, value));
}
pub fn lookup_gss_acceptor_host_name(packet: &Packet) -> Option<Result<String, AVPError>> {
packet
.lookup(GSS_ACCEPTOR_HOST_NAME_TYPE)
.map(|v| v.encode_string())
}
pub fn lookup_all_gss_acceptor_host_name(packet: &Packet) -> Result<Vec<String>, AVPError> {
let mut vec = Vec::new();
for avp in packet.lookup_all(GSS_ACCEPTOR_HOST_NAME_TYPE) {
vec.push(avp.encode_string()?)
}
Ok(vec)
}
pub const GSS_ACCEPTOR_SERVICE_SPECIFICS_TYPE: AVPType = 166;
pub fn delete_gss_acceptor_service_specifics(packet: &mut Packet) {
packet.delete(GSS_ACCEPTOR_SERVICE_SPECIFICS_TYPE);
}
pub fn add_gss_acceptor_service_specifics(packet: &mut Packet, value: &str) {
packet.add(AVP::from_string(GSS_ACCEPTOR_SERVICE_SPECIFICS_TYPE, value));
}
pub fn lookup_gss_acceptor_service_specifics(packet: &Packet) -> Option<Result<String, AVPError>> {
packet
.lookup(GSS_ACCEPTOR_SERVICE_SPECIFICS_TYPE)
.map(|v| v.encode_string())
}
pub fn lookup_all_gss_acceptor_service_specifics(packet: &Packet) -> Result<Vec<String>, AVPError> {
let mut vec = Vec::new();
for avp in packet.lookup_all(GSS_ACCEPTOR_SERVICE_SPECIFICS_TYPE) {
vec.push(avp.encode_string()?)
}
Ok(vec)
}
pub const GSS_ACCEPTOR_REALM_NAME_TYPE: AVPType = 167;
pub fn delete_gss_acceptor_realm_name(packet: &mut Packet) {
packet.delete(GSS_ACCEPTOR_REALM_NAME_TYPE);
}
pub fn add_gss_acceptor_realm_name(packet: &mut Packet, value: &str) {
packet.add(AVP::from_string(GSS_ACCEPTOR_REALM_NAME_TYPE, value));
}
pub fn lookup_gss_acceptor_realm_name(packet: &Packet) -> Option<Result<String, AVPError>> {
packet
.lookup(GSS_ACCEPTOR_REALM_NAME_TYPE)
.map(|v| v.encode_string())
}
pub fn lookup_all_gss_acceptor_realm_name(packet: &Packet) -> Result<Vec<String>, AVPError> {
let mut vec = Vec::new();
for avp in packet.lookup_all(GSS_ACCEPTOR_REALM_NAME_TYPE) {
vec.push(avp.encode_string()?)
}
Ok(vec)
}

28
radius/src/rfc7155.rs Normal file
View File

@@ -0,0 +1,28 @@
// Code generated by machine generator; DO NOT EDIT.
use crate::avp::{AVPError, AVPType, AVP};
use crate::packet::Packet;
pub const ORIGINATING_LINE_INFO_TYPE: AVPType = 94;
pub fn delete_originating_line_info(packet: &mut Packet) {
packet.delete(ORIGINATING_LINE_INFO_TYPE);
}
pub fn add_originating_line_info(packet: &mut Packet, value: &[u8]) -> Result<(), AVPError> {
if value.len() != 2 {
return Err(AVPError::InvalidAttributeLengthError(2));
}
packet.add(AVP::from_bytes(ORIGINATING_LINE_INFO_TYPE, value));
Ok(())
}
pub fn lookup_originating_line_info(packet: &Packet) -> Option<Vec<u8>> {
packet
.lookup(ORIGINATING_LINE_INFO_TYPE)
.map(|v| v.encode_bytes())
}
pub fn lookup_all_originating_line_info(packet: &Packet) -> Vec<Vec<u8>> {
let mut vec = Vec::new();
for avp in packet.lookup_all(ORIGINATING_LINE_INFO_TYPE) {
vec.push(avp.encode_bytes())
}
vec
}

View File

@@ -11,13 +11,19 @@ DICTS=$(ls "$DICTS_DIR")
# shellcheck disable=SC2068
for DICT in ${DICTS[@]}; do
DICT_NAME="${DICT##*.}"
cat /dev/null > "${SRC_DIR}/${DICT_NAME}.rs"
DICT_FILE="${DICTS_DIR}/dictionary.${DICT_NAME}"
if [ -f "$DICT_FILE" ]; then
cat /dev/null > "${SRC_DIR}/${DICT_NAME}.rs"
fi
done
# shellcheck disable=SC2068
for DICT in ${DICTS[@]}; do
DICT_NAME="${DICT##*.}"
cargo run --bin code-generator "${DICTS_DIR}/dictionary.${DICT_NAME}" "${SRC_DIR}/${DICT_NAME}.rs"
DICT_FILE="${DICTS_DIR}/dictionary.${DICT_NAME}"
if [ -f "$DICT_FILE" ]; then
cargo run --bin code-generator "$DICT_FILE" "${SRC_DIR}/${DICT_NAME}.rs"
fi
done
cargo fix --allow-dirty --allow-staged