mirror of
https://github.com/cubixle/radius-rs.git
synced 2026-04-30 16:58:39 +01:00
Support integer attribute type
This commit is contained in:
+1
-1
@@ -8,7 +8,7 @@ use chrono::{DateTime, TimeZone, Utc};
|
|||||||
pub struct Attribute(pub(crate) Vec<u8>);
|
pub struct Attribute(pub(crate) Vec<u8>);
|
||||||
|
|
||||||
impl Attribute {
|
impl Attribute {
|
||||||
pub fn from_integer32(v: u32) -> Self {
|
pub fn from_u32(v: u32) -> Self {
|
||||||
Attribute(u32::to_be_bytes(v).to_vec())
|
Attribute(u32::to_be_bytes(v).to_vec())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+20
-2
@@ -139,7 +139,10 @@ fn generate_attribute_code(w: &mut BufWriter<File>, attr: &RadiusAttribute) {
|
|||||||
generate_common_attribute_code(w, attr);
|
generate_common_attribute_code(w, attr);
|
||||||
generate_ipaddr_attribute_code(w, attr);
|
generate_ipaddr_attribute_code(w, attr);
|
||||||
}
|
}
|
||||||
// RadiusAttributeValueType::INTEGER => generate_integer_attribute_code(w, attr),
|
RadiusAttributeValueType::INTEGER => {
|
||||||
|
generate_common_attribute_code(w, attr);
|
||||||
|
generate_integer_attribute_code(w, attr);
|
||||||
|
}
|
||||||
// RadiusAttributeValueType::VSA => generate_vsa_attribute_code(w, attr),
|
// RadiusAttributeValueType::VSA => generate_vsa_attribute_code(w, attr),
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
@@ -251,7 +254,22 @@ fn generate_ipaddr_attribute_code(w: &mut BufWriter<File>, attr: &RadiusAttribut
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn generate_integer_attribute_code(w: &mut BufWriter<File>, attr: &RadiusAttribute) {
|
fn generate_integer_attribute_code(w: &mut BufWriter<File>, attr: &RadiusAttribute) {
|
||||||
unimplemented!()
|
let attr_name = attr.name.clone();
|
||||||
|
|
||||||
|
let type_identifier = format!("{}_TYPE", attr_name.to_screaming_snake_case());
|
||||||
|
let type_calling = format!("Self::{}", type_identifier);
|
||||||
|
|
||||||
|
let code = format!(
|
||||||
|
"pub fn add_{method_identifier}(packet: &mut Packet, value: u32) {{
|
||||||
|
let attr = Attribute::from_u32(value);
|
||||||
|
packet.add({type_calling}, &attr);
|
||||||
|
}}
|
||||||
|
",
|
||||||
|
method_identifier = attr_name.to_snake_case(),
|
||||||
|
type_calling = type_calling,
|
||||||
|
);
|
||||||
|
|
||||||
|
w.write_all(code.as_bytes()).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn generate_vsa_attribute_code(w: &mut BufWriter<File>, attr: &RadiusAttribute) {
|
fn generate_vsa_attribute_code(w: &mut BufWriter<File>, attr: &RadiusAttribute) {
|
||||||
|
|||||||
+225
@@ -70,6 +70,51 @@ impl RFC2865 {
|
|||||||
packet.add(Self::NAS_IP_ADDRESS_TYPE, &attr);
|
packet.add(Self::NAS_IP_ADDRESS_TYPE, &attr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub const NAS_PORT_TYPE: AVPType = 5;
|
||||||
|
pub fn delete_nas_port(packet: &mut Packet) {
|
||||||
|
packet.delete(Self::NAS_PORT_TYPE);
|
||||||
|
}
|
||||||
|
pub fn lookup_nas_port(packet: &Packet) -> Option<&Attribute> {
|
||||||
|
packet.lookup(Self::NAS_PORT_TYPE)
|
||||||
|
}
|
||||||
|
pub fn lookup_all_nas_port(packet: &Packet) -> Vec<&Attribute> {
|
||||||
|
packet.lookup_all(Self::NAS_PORT_TYPE)
|
||||||
|
}
|
||||||
|
pub fn add_nas_port(packet: &mut Packet, value: u32) {
|
||||||
|
let attr = Attribute::from_u32(value);
|
||||||
|
packet.add(Self::NAS_PORT_TYPE, &attr);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub const SERVICE_TYPE_TYPE: AVPType = 6;
|
||||||
|
pub fn delete_service_type(packet: &mut Packet) {
|
||||||
|
packet.delete(Self::SERVICE_TYPE_TYPE);
|
||||||
|
}
|
||||||
|
pub fn lookup_service_type(packet: &Packet) -> Option<&Attribute> {
|
||||||
|
packet.lookup(Self::SERVICE_TYPE_TYPE)
|
||||||
|
}
|
||||||
|
pub fn lookup_all_service_type(packet: &Packet) -> Vec<&Attribute> {
|
||||||
|
packet.lookup_all(Self::SERVICE_TYPE_TYPE)
|
||||||
|
}
|
||||||
|
pub fn add_service_type(packet: &mut Packet, value: u32) {
|
||||||
|
let attr = Attribute::from_u32(value);
|
||||||
|
packet.add(Self::SERVICE_TYPE_TYPE, &attr);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub const FRAMED_PROTOCOL_TYPE: AVPType = 7;
|
||||||
|
pub fn delete_framed_protocol(packet: &mut Packet) {
|
||||||
|
packet.delete(Self::FRAMED_PROTOCOL_TYPE);
|
||||||
|
}
|
||||||
|
pub fn lookup_framed_protocol(packet: &Packet) -> Option<&Attribute> {
|
||||||
|
packet.lookup(Self::FRAMED_PROTOCOL_TYPE)
|
||||||
|
}
|
||||||
|
pub fn lookup_all_framed_protocol(packet: &Packet) -> Vec<&Attribute> {
|
||||||
|
packet.lookup_all(Self::FRAMED_PROTOCOL_TYPE)
|
||||||
|
}
|
||||||
|
pub fn add_framed_protocol(packet: &mut Packet, value: u32) {
|
||||||
|
let attr = Attribute::from_u32(value);
|
||||||
|
packet.add(Self::FRAMED_PROTOCOL_TYPE, &attr);
|
||||||
|
}
|
||||||
|
|
||||||
pub const FRAMED_IP_ADDRESS_TYPE: AVPType = 8;
|
pub const FRAMED_IP_ADDRESS_TYPE: AVPType = 8;
|
||||||
pub fn delete_framed_ip_address(packet: &mut Packet) {
|
pub fn delete_framed_ip_address(packet: &mut Packet) {
|
||||||
packet.delete(Self::FRAMED_IP_ADDRESS_TYPE);
|
packet.delete(Self::FRAMED_IP_ADDRESS_TYPE);
|
||||||
@@ -100,6 +145,21 @@ impl RFC2865 {
|
|||||||
packet.add(Self::FRAMED_IP_NETMASK_TYPE, &attr);
|
packet.add(Self::FRAMED_IP_NETMASK_TYPE, &attr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub const FRAMED_ROUTING_TYPE: AVPType = 10;
|
||||||
|
pub fn delete_framed_routing(packet: &mut Packet) {
|
||||||
|
packet.delete(Self::FRAMED_ROUTING_TYPE);
|
||||||
|
}
|
||||||
|
pub fn lookup_framed_routing(packet: &Packet) -> Option<&Attribute> {
|
||||||
|
packet.lookup(Self::FRAMED_ROUTING_TYPE)
|
||||||
|
}
|
||||||
|
pub fn lookup_all_framed_routing(packet: &Packet) -> Vec<&Attribute> {
|
||||||
|
packet.lookup_all(Self::FRAMED_ROUTING_TYPE)
|
||||||
|
}
|
||||||
|
pub fn add_framed_routing(packet: &mut Packet, value: u32) {
|
||||||
|
let attr = Attribute::from_u32(value);
|
||||||
|
packet.add(Self::FRAMED_ROUTING_TYPE, &attr);
|
||||||
|
}
|
||||||
|
|
||||||
pub const FILTER_ID_TYPE: AVPType = 11;
|
pub const FILTER_ID_TYPE: AVPType = 11;
|
||||||
pub fn delete_filter_id(packet: &mut Packet) {
|
pub fn delete_filter_id(packet: &mut Packet) {
|
||||||
packet.delete(Self::FILTER_ID_TYPE);
|
packet.delete(Self::FILTER_ID_TYPE);
|
||||||
@@ -115,6 +175,36 @@ impl RFC2865 {
|
|||||||
packet.add(Self::FILTER_ID_TYPE, &attr);
|
packet.add(Self::FILTER_ID_TYPE, &attr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub const FRAMED_MTU_TYPE: AVPType = 12;
|
||||||
|
pub fn delete_framed_mtu(packet: &mut Packet) {
|
||||||
|
packet.delete(Self::FRAMED_MTU_TYPE);
|
||||||
|
}
|
||||||
|
pub fn lookup_framed_mtu(packet: &Packet) -> Option<&Attribute> {
|
||||||
|
packet.lookup(Self::FRAMED_MTU_TYPE)
|
||||||
|
}
|
||||||
|
pub fn lookup_all_framed_mtu(packet: &Packet) -> Vec<&Attribute> {
|
||||||
|
packet.lookup_all(Self::FRAMED_MTU_TYPE)
|
||||||
|
}
|
||||||
|
pub fn add_framed_mtu(packet: &mut Packet, value: u32) {
|
||||||
|
let attr = Attribute::from_u32(value);
|
||||||
|
packet.add(Self::FRAMED_MTU_TYPE, &attr);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub const FRAMED_COMPRESSION_TYPE: AVPType = 13;
|
||||||
|
pub fn delete_framed_compression(packet: &mut Packet) {
|
||||||
|
packet.delete(Self::FRAMED_COMPRESSION_TYPE);
|
||||||
|
}
|
||||||
|
pub fn lookup_framed_compression(packet: &Packet) -> Option<&Attribute> {
|
||||||
|
packet.lookup(Self::FRAMED_COMPRESSION_TYPE)
|
||||||
|
}
|
||||||
|
pub fn lookup_all_framed_compression(packet: &Packet) -> Vec<&Attribute> {
|
||||||
|
packet.lookup_all(Self::FRAMED_COMPRESSION_TYPE)
|
||||||
|
}
|
||||||
|
pub fn add_framed_compression(packet: &mut Packet, value: u32) {
|
||||||
|
let attr = Attribute::from_u32(value);
|
||||||
|
packet.add(Self::FRAMED_COMPRESSION_TYPE, &attr);
|
||||||
|
}
|
||||||
|
|
||||||
pub const LOGIN_IP_HOST_TYPE: AVPType = 14;
|
pub const LOGIN_IP_HOST_TYPE: AVPType = 14;
|
||||||
pub fn delete_login_ip_host(packet: &mut Packet) {
|
pub fn delete_login_ip_host(packet: &mut Packet) {
|
||||||
packet.delete(Self::LOGIN_IP_HOST_TYPE);
|
packet.delete(Self::LOGIN_IP_HOST_TYPE);
|
||||||
@@ -130,6 +220,36 @@ impl RFC2865 {
|
|||||||
packet.add(Self::LOGIN_IP_HOST_TYPE, &attr);
|
packet.add(Self::LOGIN_IP_HOST_TYPE, &attr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub const LOGIN_SERVICE_TYPE: AVPType = 15;
|
||||||
|
pub fn delete_login_service(packet: &mut Packet) {
|
||||||
|
packet.delete(Self::LOGIN_SERVICE_TYPE);
|
||||||
|
}
|
||||||
|
pub fn lookup_login_service(packet: &Packet) -> Option<&Attribute> {
|
||||||
|
packet.lookup(Self::LOGIN_SERVICE_TYPE)
|
||||||
|
}
|
||||||
|
pub fn lookup_all_login_service(packet: &Packet) -> Vec<&Attribute> {
|
||||||
|
packet.lookup_all(Self::LOGIN_SERVICE_TYPE)
|
||||||
|
}
|
||||||
|
pub fn add_login_service(packet: &mut Packet, value: u32) {
|
||||||
|
let attr = Attribute::from_u32(value);
|
||||||
|
packet.add(Self::LOGIN_SERVICE_TYPE, &attr);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub const LOGIN_TCP_PORT_TYPE: AVPType = 16;
|
||||||
|
pub fn delete_login_tcp_port(packet: &mut Packet) {
|
||||||
|
packet.delete(Self::LOGIN_TCP_PORT_TYPE);
|
||||||
|
}
|
||||||
|
pub fn lookup_login_tcp_port(packet: &Packet) -> Option<&Attribute> {
|
||||||
|
packet.lookup(Self::LOGIN_TCP_PORT_TYPE)
|
||||||
|
}
|
||||||
|
pub fn lookup_all_login_tcp_port(packet: &Packet) -> Vec<&Attribute> {
|
||||||
|
packet.lookup_all(Self::LOGIN_TCP_PORT_TYPE)
|
||||||
|
}
|
||||||
|
pub fn add_login_tcp_port(packet: &mut Packet, value: u32) {
|
||||||
|
let attr = Attribute::from_u32(value);
|
||||||
|
packet.add(Self::LOGIN_TCP_PORT_TYPE, &attr);
|
||||||
|
}
|
||||||
|
|
||||||
pub const REPLY_MESSAGE_TYPE: AVPType = 18;
|
pub const REPLY_MESSAGE_TYPE: AVPType = 18;
|
||||||
pub fn delete_reply_message(packet: &mut Packet) {
|
pub fn delete_reply_message(packet: &mut Packet) {
|
||||||
packet.delete(Self::REPLY_MESSAGE_TYPE);
|
packet.delete(Self::REPLY_MESSAGE_TYPE);
|
||||||
@@ -235,6 +355,51 @@ impl RFC2865 {
|
|||||||
packet.add(Self::CLASS_TYPE, &attr);
|
packet.add(Self::CLASS_TYPE, &attr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub const SESSION_TIMEOUT_TYPE: AVPType = 27;
|
||||||
|
pub fn delete_session_timeout(packet: &mut Packet) {
|
||||||
|
packet.delete(Self::SESSION_TIMEOUT_TYPE);
|
||||||
|
}
|
||||||
|
pub fn lookup_session_timeout(packet: &Packet) -> Option<&Attribute> {
|
||||||
|
packet.lookup(Self::SESSION_TIMEOUT_TYPE)
|
||||||
|
}
|
||||||
|
pub fn lookup_all_session_timeout(packet: &Packet) -> Vec<&Attribute> {
|
||||||
|
packet.lookup_all(Self::SESSION_TIMEOUT_TYPE)
|
||||||
|
}
|
||||||
|
pub fn add_session_timeout(packet: &mut Packet, value: u32) {
|
||||||
|
let attr = Attribute::from_u32(value);
|
||||||
|
packet.add(Self::SESSION_TIMEOUT_TYPE, &attr);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub const IDLE_TIMEOUT_TYPE: AVPType = 28;
|
||||||
|
pub fn delete_idle_timeout(packet: &mut Packet) {
|
||||||
|
packet.delete(Self::IDLE_TIMEOUT_TYPE);
|
||||||
|
}
|
||||||
|
pub fn lookup_idle_timeout(packet: &Packet) -> Option<&Attribute> {
|
||||||
|
packet.lookup(Self::IDLE_TIMEOUT_TYPE)
|
||||||
|
}
|
||||||
|
pub fn lookup_all_idle_timeout(packet: &Packet) -> Vec<&Attribute> {
|
||||||
|
packet.lookup_all(Self::IDLE_TIMEOUT_TYPE)
|
||||||
|
}
|
||||||
|
pub fn add_idle_timeout(packet: &mut Packet, value: u32) {
|
||||||
|
let attr = Attribute::from_u32(value);
|
||||||
|
packet.add(Self::IDLE_TIMEOUT_TYPE, &attr);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub const TERMINATION_ACTION_TYPE: AVPType = 29;
|
||||||
|
pub fn delete_termination_action(packet: &mut Packet) {
|
||||||
|
packet.delete(Self::TERMINATION_ACTION_TYPE);
|
||||||
|
}
|
||||||
|
pub fn lookup_termination_action(packet: &Packet) -> Option<&Attribute> {
|
||||||
|
packet.lookup(Self::TERMINATION_ACTION_TYPE)
|
||||||
|
}
|
||||||
|
pub fn lookup_all_termination_action(packet: &Packet) -> Vec<&Attribute> {
|
||||||
|
packet.lookup_all(Self::TERMINATION_ACTION_TYPE)
|
||||||
|
}
|
||||||
|
pub fn add_termination_action(packet: &mut Packet, value: u32) {
|
||||||
|
let attr = Attribute::from_u32(value);
|
||||||
|
packet.add(Self::TERMINATION_ACTION_TYPE, &attr);
|
||||||
|
}
|
||||||
|
|
||||||
pub const CALLED_STATION_ID_TYPE: AVPType = 30;
|
pub const CALLED_STATION_ID_TYPE: AVPType = 30;
|
||||||
pub fn delete_called_station_id(packet: &mut Packet) {
|
pub fn delete_called_station_id(packet: &mut Packet) {
|
||||||
packet.delete(Self::CALLED_STATION_ID_TYPE);
|
packet.delete(Self::CALLED_STATION_ID_TYPE);
|
||||||
@@ -340,6 +505,36 @@ impl RFC2865 {
|
|||||||
packet.add(Self::LOGIN_LAT_GROUP_TYPE, &attr);
|
packet.add(Self::LOGIN_LAT_GROUP_TYPE, &attr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub const FRAMED_APPLE_TALK_LINK_TYPE: AVPType = 37;
|
||||||
|
pub fn delete_framed_apple_talk_link(packet: &mut Packet) {
|
||||||
|
packet.delete(Self::FRAMED_APPLE_TALK_LINK_TYPE);
|
||||||
|
}
|
||||||
|
pub fn lookup_framed_apple_talk_link(packet: &Packet) -> Option<&Attribute> {
|
||||||
|
packet.lookup(Self::FRAMED_APPLE_TALK_LINK_TYPE)
|
||||||
|
}
|
||||||
|
pub fn lookup_all_framed_apple_talk_link(packet: &Packet) -> Vec<&Attribute> {
|
||||||
|
packet.lookup_all(Self::FRAMED_APPLE_TALK_LINK_TYPE)
|
||||||
|
}
|
||||||
|
pub fn add_framed_apple_talk_link(packet: &mut Packet, value: u32) {
|
||||||
|
let attr = Attribute::from_u32(value);
|
||||||
|
packet.add(Self::FRAMED_APPLE_TALK_LINK_TYPE, &attr);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub const FRAMED_APPLE_TALK_NETWORK_TYPE: AVPType = 38;
|
||||||
|
pub fn delete_framed_apple_talk_network(packet: &mut Packet) {
|
||||||
|
packet.delete(Self::FRAMED_APPLE_TALK_NETWORK_TYPE);
|
||||||
|
}
|
||||||
|
pub fn lookup_framed_apple_talk_network(packet: &Packet) -> Option<&Attribute> {
|
||||||
|
packet.lookup(Self::FRAMED_APPLE_TALK_NETWORK_TYPE)
|
||||||
|
}
|
||||||
|
pub fn lookup_all_framed_apple_talk_network(packet: &Packet) -> Vec<&Attribute> {
|
||||||
|
packet.lookup_all(Self::FRAMED_APPLE_TALK_NETWORK_TYPE)
|
||||||
|
}
|
||||||
|
pub fn add_framed_apple_talk_network(packet: &mut Packet, value: u32) {
|
||||||
|
let attr = Attribute::from_u32(value);
|
||||||
|
packet.add(Self::FRAMED_APPLE_TALK_NETWORK_TYPE, &attr);
|
||||||
|
}
|
||||||
|
|
||||||
pub const FRAMED_APPLE_TALK_ZONE_TYPE: AVPType = 39;
|
pub const FRAMED_APPLE_TALK_ZONE_TYPE: AVPType = 39;
|
||||||
pub fn delete_framed_apple_talk_zone(packet: &mut Packet) {
|
pub fn delete_framed_apple_talk_zone(packet: &mut Packet) {
|
||||||
packet.delete(Self::FRAMED_APPLE_TALK_ZONE_TYPE);
|
packet.delete(Self::FRAMED_APPLE_TALK_ZONE_TYPE);
|
||||||
@@ -370,6 +565,36 @@ impl RFC2865 {
|
|||||||
packet.add(Self::CHAP_CHALLENGE_TYPE, &attr);
|
packet.add(Self::CHAP_CHALLENGE_TYPE, &attr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub const NAS_PORT_TYPE_TYPE: AVPType = 61;
|
||||||
|
pub fn delete_nas_port_type(packet: &mut Packet) {
|
||||||
|
packet.delete(Self::NAS_PORT_TYPE_TYPE);
|
||||||
|
}
|
||||||
|
pub fn lookup_nas_port_type(packet: &Packet) -> Option<&Attribute> {
|
||||||
|
packet.lookup(Self::NAS_PORT_TYPE_TYPE)
|
||||||
|
}
|
||||||
|
pub fn lookup_all_nas_port_type(packet: &Packet) -> Vec<&Attribute> {
|
||||||
|
packet.lookup_all(Self::NAS_PORT_TYPE_TYPE)
|
||||||
|
}
|
||||||
|
pub fn add_nas_port_type(packet: &mut Packet, value: u32) {
|
||||||
|
let attr = Attribute::from_u32(value);
|
||||||
|
packet.add(Self::NAS_PORT_TYPE_TYPE, &attr);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub const PORT_LIMIT_TYPE: AVPType = 62;
|
||||||
|
pub fn delete_port_limit(packet: &mut Packet) {
|
||||||
|
packet.delete(Self::PORT_LIMIT_TYPE);
|
||||||
|
}
|
||||||
|
pub fn lookup_port_limit(packet: &Packet) -> Option<&Attribute> {
|
||||||
|
packet.lookup(Self::PORT_LIMIT_TYPE)
|
||||||
|
}
|
||||||
|
pub fn lookup_all_port_limit(packet: &Packet) -> Vec<&Attribute> {
|
||||||
|
packet.lookup_all(Self::PORT_LIMIT_TYPE)
|
||||||
|
}
|
||||||
|
pub fn add_port_limit(packet: &mut Packet, value: u32) {
|
||||||
|
let attr = Attribute::from_u32(value);
|
||||||
|
packet.add(Self::PORT_LIMIT_TYPE, &attr);
|
||||||
|
}
|
||||||
|
|
||||||
pub const LOGIN_LAT_PORT_TYPE: AVPType = 63;
|
pub const LOGIN_LAT_PORT_TYPE: AVPType = 63;
|
||||||
pub fn delete_login_lat_port(packet: &mut Packet) {
|
pub fn delete_login_lat_port(packet: &mut Packet) {
|
||||||
packet.delete(Self::LOGIN_LAT_PORT_TYPE);
|
packet.delete(Self::LOGIN_LAT_PORT_TYPE);
|
||||||
|
|||||||
Reference in New Issue
Block a user