From dfbf191896fb1648354deb8a29f782a3cc868b50 Mon Sep 17 00:00:00 2001 From: moznion Date: Wed, 2 Dec 2020 02:55:03 +0900 Subject: [PATCH] Support RFC5607 --- README.md | 2 +- dicts/dictionary.rfc5607 | 33 ++++++++++++ radius/src/lib.rs | 1 + radius/src/rfc5607.rs | 113 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 148 insertions(+), 1 deletion(-) create mode 100644 dicts/dictionary.rfc5607 create mode 100644 radius/src/rfc5607.rs diff --git a/README.md b/README.md index 5a7128a..b234891 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ This supports the following RFC dictionaries at the moment: - [RFC3576](https://tools.ietf.org/html/rfc3576) - [RFC4072](https://tools.ietf.org/html/rfc4072) - [RFC5090](https://tools.ietf.org/html/rfc5090) +- [RFC5607](https://tools.ietf.org/html/rfc5607) - [RFC6519](https://tools.ietf.org/html/rfc6519) - [RFC6677](https://tools.ietf.org/html/rfc6677) @@ -44,7 +45,6 @@ Simple example implementations are here: - rfc5176 - rfc5447 - rfc5580 - - rfc5607 - rfc5904 - rfc6572 - rfc6911 diff --git a/dicts/dictionary.rfc5607 b/dicts/dictionary.rfc5607 new file mode 100644 index 0000000..7ce15ed --- /dev/null +++ b/dicts/dictionary.rfc5607 @@ -0,0 +1,33 @@ +# -*- 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 5607. +# http://www.ietf.org/rfc/rfc5607.txt +# +# $Id$ +# + +VALUE Service-Type Framed-Management 18 + +ATTRIBUTE Framed-Management 133 integer + +VALUE Framed-Management SNMP 1 +VALUE Framed-Management Web-Based 2 +VALUE Framed-Management Netconf 3 +VALUE Framed-Management FTP 4 +VALUE Framed-Management TFTP 5 +VALUE Framed-Management SFTP 6 +VALUE Framed-Management RCP 7 +VALUE Framed-Management SCP 8 + +ATTRIBUTE Management-Transport-Protection 134 integer + +VALUE Management-Transport-Protection No-Protection 1 +VALUE Management-Transport-Protection Integrity-Protection 2 +VALUE Management-Transport-Protection Integrity-Confidentiality-Protection 3 + +ATTRIBUTE Management-Policy-Id 135 string + +ATTRIBUTE Management-Privilege-Level 136 integer diff --git a/radius/src/lib.rs b/radius/src/lib.rs index bc1c080..c266342 100644 --- a/radius/src/lib.rs +++ b/radius/src/lib.rs @@ -10,6 +10,7 @@ pub mod rfc2868; pub mod rfc3576; pub mod rfc4072; pub mod rfc5090; +pub mod rfc5607; pub mod rfc6519; pub mod rfc6677; pub mod tag; diff --git a/radius/src/rfc5607.rs b/radius/src/rfc5607.rs new file mode 100644 index 0000000..c588a14 --- /dev/null +++ b/radius/src/rfc5607.rs @@ -0,0 +1,113 @@ +// Code generated by machine generator; DO NOT EDIT. + +use crate::avp::{AVPError, AVPType, AVP}; +use crate::packet::Packet; + +pub type FramedManagement = u32; +pub const FRAMED_MANAGEMENT_SNMP: FramedManagement = 1; +pub const FRAMED_MANAGEMENT_WEB_BASED: FramedManagement = 2; +pub const FRAMED_MANAGEMENT_NETCONF: FramedManagement = 3; +pub const FRAMED_MANAGEMENT_FTP: FramedManagement = 4; +pub const FRAMED_MANAGEMENT_TFTP: FramedManagement = 5; +pub const FRAMED_MANAGEMENT_SFTP: FramedManagement = 6; +pub const FRAMED_MANAGEMENT_RCP: FramedManagement = 7; +pub const FRAMED_MANAGEMENT_SCP: FramedManagement = 8; + +pub type ManagementTransportProtection = u32; +pub const MANAGEMENT_TRANSPORT_PROTECTION_NO_PROTECTION: ManagementTransportProtection = 1; +pub const MANAGEMENT_TRANSPORT_PROTECTION_INTEGRITY_PROTECTION: ManagementTransportProtection = 2; +pub const MANAGEMENT_TRANSPORT_PROTECTION_INTEGRITY_CONFIDENTIALITY_PROTECTION: + ManagementTransportProtection = 3; + +pub type ServiceType = u32; +pub const SERVICE_TYPE_FRAMED_MANAGEMENT: ServiceType = 18; + +pub const FRAMED_MANAGEMENT_TYPE: AVPType = 133; +pub fn delete_framed_management(packet: &mut Packet) { + packet.delete(FRAMED_MANAGEMENT_TYPE); +} +pub fn add_framed_management(packet: &mut Packet, value: FramedManagement) { + packet.add(AVP::from_u32(FRAMED_MANAGEMENT_TYPE, value as u32)); +} +pub fn lookup_framed_management(packet: &Packet) -> Option> { + packet + .lookup(FRAMED_MANAGEMENT_TYPE) + .map(|v| Ok(v.encode_u32()? as FramedManagement)) +} +pub fn lookup_all_framed_management(packet: &Packet) -> Result, AVPError> { + let mut vec = Vec::new(); + for avp in packet.lookup_all(FRAMED_MANAGEMENT_TYPE) { + vec.push(avp.encode_u32()? as FramedManagement) + } + Ok(vec) +} + +pub const MANAGEMENT_TRANSPORT_PROTECTION_TYPE: AVPType = 134; +pub fn delete_management_transport_protection(packet: &mut Packet) { + packet.delete(MANAGEMENT_TRANSPORT_PROTECTION_TYPE); +} +pub fn add_management_transport_protection( + packet: &mut Packet, + value: ManagementTransportProtection, +) { + packet.add(AVP::from_u32( + MANAGEMENT_TRANSPORT_PROTECTION_TYPE, + value as u32, + )); +} +pub fn lookup_management_transport_protection( + packet: &Packet, +) -> Option> { + packet + .lookup(MANAGEMENT_TRANSPORT_PROTECTION_TYPE) + .map(|v| Ok(v.encode_u32()? as ManagementTransportProtection)) +} +pub fn lookup_all_management_transport_protection( + packet: &Packet, +) -> Result, AVPError> { + let mut vec = Vec::new(); + for avp in packet.lookup_all(MANAGEMENT_TRANSPORT_PROTECTION_TYPE) { + vec.push(avp.encode_u32()? as ManagementTransportProtection) + } + Ok(vec) +} + +pub const MANAGEMENT_POLICY_ID_TYPE: AVPType = 135; +pub fn delete_management_policy_id(packet: &mut Packet) { + packet.delete(MANAGEMENT_POLICY_ID_TYPE); +} +pub fn add_management_policy_id(packet: &mut Packet, value: &str) { + packet.add(AVP::from_string(MANAGEMENT_POLICY_ID_TYPE, value)); +} +pub fn lookup_management_policy_id(packet: &Packet) -> Option> { + packet + .lookup(MANAGEMENT_POLICY_ID_TYPE) + .map(|v| v.encode_string()) +} +pub fn lookup_all_management_policy_id(packet: &Packet) -> Result, AVPError> { + let mut vec = Vec::new(); + for avp in packet.lookup_all(MANAGEMENT_POLICY_ID_TYPE) { + vec.push(avp.encode_string()?) + } + Ok(vec) +} + +pub const MANAGEMENT_PRIVILEGE_LEVEL_TYPE: AVPType = 136; +pub fn delete_management_privilege_level(packet: &mut Packet) { + packet.delete(MANAGEMENT_PRIVILEGE_LEVEL_TYPE); +} +pub fn add_management_privilege_level(packet: &mut Packet, value: u32) { + packet.add(AVP::from_u32(MANAGEMENT_PRIVILEGE_LEVEL_TYPE, value)); +} +pub fn lookup_management_privilege_level(packet: &Packet) -> Option> { + packet + .lookup(MANAGEMENT_PRIVILEGE_LEVEL_TYPE) + .map(|v| v.encode_u32()) +} +pub fn lookup_all_management_privilege_level(packet: &Packet) -> Result, AVPError> { + let mut vec = Vec::new(); + for avp in packet.lookup_all(MANAGEMENT_PRIVILEGE_LEVEL_TYPE) { + vec.push(avp.encode_u32()?) + } + Ok(vec) +}