mirror of
https://github.com/cubixle/radius-rs.git
synced 2026-04-24 22:54:43 +01:00
Support the following RFC dictionaries
- RFC4603 - RFC4675 - RFC4818 - RFC4849 - RFC5176 - RFC6911 - RFC7055 - RFC7155
This commit is contained in:
16
README.md
16
README.md
@@ -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
19
dicts/dictionary.rfc4603
Normal 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
31
dicts/dictionary.rfc4675
Normal 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
14
dicts/dictionary.rfc4818
Normal 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
11
dicts/dictionary.rfc4849
Normal 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
12
dicts/dictionary.rfc5176
Normal 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
14
dicts/dictionary.rfc6911
Normal 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
13
dicts/dictionary.rfc7055
Normal 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
13
dicts/dictionary.rfc7155
Normal 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]
|
||||
@@ -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
8
radius/src/rfc4603.rs
Normal 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
86
radius/src/rfc4675.rs
Normal 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
25
radius/src/rfc4818.rs
Normal 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
24
radius/src/rfc4849.rs
Normal 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
5
radius/src/rfc5176.rs
Normal 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
107
radius/src/rfc6911.rs
Normal 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
84
radius/src/rfc7055.rs
Normal 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
28
radius/src/rfc7155.rs
Normal 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
|
||||
}
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user