/* $OpenBSD: radius.h,v 1.4 2024/02/25 06:22:45 yasuoka Exp $ */ /*- * Copyright (c) 2009 Internet Initiative Japan Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #ifndef _RADIUS_H #define _RADIUS_H #define RADIUS_DEFAULT_PORT 1812 #define RADIUS_ACCT_DEFAULT_PORT 1813 /* RADIUS codes */ #define RADIUS_CODE_ACCESS_REQUEST 1 #define RADIUS_CODE_ACCESS_ACCEPT 2 #define RADIUS_CODE_ACCESS_REJECT 3 #define RADIUS_CODE_ACCOUNTING_REQUEST 4 #define RADIUS_CODE_ACCOUNTING_RESPONSE 5 #define RADIUS_CODE_ACCESS_CHALLENGE 11 #define RADIUS_CODE_STATUS_SERVER 12 #define RADIUS_CODE_STATUS_CLIENT 13 /* RADIUS attributes */ #define RADIUS_TYPE_USER_NAME 1 #define RADIUS_TYPE_USER_PASSWORD 2 #define RADIUS_TYPE_CHAP_PASSWORD 3 #define RADIUS_TYPE_NAS_IP_ADDRESS 4 #define RADIUS_TYPE_NAS_PORT 5 #define RADIUS_TYPE_SERVICE_TYPE 6 #define RADIUS_TYPE_FRAMED_PROTOCOL 7 #define RADIUS_TYPE_FRAMED_IP_ADDRESS 8 #define RADIUS_TYPE_FRAMED_IP_NETMASK 9 #define RADIUS_TYPE_FRAMED_ROUTING 10 #define RADIUS_TYPE_FILTER_ID 11 #define RADIUS_TYPE_FRAMED_MTU 12 #define RADIUS_TYPE_FRAMED_COMPRESSION 13 #define RADIUS_TYPE_LOGIN_IP_HOST 14 #define RADIUS_TYPE_LOGIN_SERVICE 15 #define RADIUS_TYPE_LOGIN_TCP_PORT 16 /* unassigned 17 */ #define RADIUS_TYPE_REPLY_MESSAGE 18 #define RADIUS_TYPE_CALLBACK_NUMBER 19 #define RADIUS_TYPE_CALLBACK_ID 20 /* unassigned 21 */ #define RADIUS_TYPE_FRAMED_ROUTE 22 #define RADIUS_TYPE_FRAMED_IPX_NETWORK 23 #define RADIUS_TYPE_STATE 24 #define RADIUS_TYPE_CLASS 25 #define RADIUS_TYPE_VENDOR_SPECIFIC 26 #define RADIUS_TYPE_SESSION_TIMEOUT 27 #define RADIUS_TYPE_IDLE_TIMEOUT 28 #define RADIUS_TYPE_TERMINATION_ACTION 29 #define RADIUS_TYPE_CALLED_STATION_ID 30 #define RADIUS_TYPE_CALLING_STATION_ID 31 #define RADIUS_TYPE_NAS_IDENTIFIER 32 #define RADIUS_TYPE_PROXY_STATE 33 #define RADIUS_TYPE_LOGIN_LAT_SERVICE 34 #define RADIUS_TYPE_LOGIN_LAT_NODE 35 #define RADIUS_TYPE_LOGIN_LAT_GROUP 36 #define RADIUS_TYPE_FRAMED_APPLETALK_LINK 37 #define RADIUS_TYPE_FRAMED_APPLETALK_NETWORK 38 #define RADIUS_TYPE_FRAMED_APPLETALK_ZONE 39 #define RADIUS_TYPE_ACCT_STATUS_TYPE 40 #define RADIUS_TYPE_ACCT_DELAY_TIME 41 #define RADIUS_TYPE_ACCT_INPUT_OCTETS 42 #define RADIUS_TYPE_ACCT_OUTPUT_OCTETS 43 #define RADIUS_TYPE_ACCT_SESSION_ID 44 #define RADIUS_TYPE_ACCT_AUTHENTIC 45 #define RADIUS_TYPE_ACCT_SESSION_TIME 46 #define RADIUS_TYPE_ACCT_INPUT_PACKETS 47 #define RADIUS_TYPE_ACCT_OUTPUT_PACKETS 48 #define RADIUS_TYPE_ACCT_TERMINATE_CAUSE 49 #define RADIUS_TYPE_ACCT_MULTI_SESSION_ID 50 #define RADIUS_TYPE_ACCT_LINK_COUNT 51 #define RADIUS_TYPE_ACCT_INPUT_GIGAWORDS 52 #define RADIUS_TYPE_ACCT_OUTPUT_GIGAWORDS 53 /* unassigned (for accounting) 54 */ #define RADIUS_TYPE_EVENT_TIMESTAMP 55 /* unassigned (for accounting) 56 */ /* unassigned (for accounting) 57 */ /* unassigned (for accounting) 58 */ /* unassigned (for accounting) 59 */ #define RADIUS_TYPE_CHAP_CHALLENGE 60 #define RADIUS_TYPE_NAS_PORT_TYPE 61 #define RADIUS_TYPE_PORT_LIMIT 62 #define RADIUS_TYPE_LOGIN_LAT_PORT 63 #define RADIUS_TYPE_TUNNEL_TYPE 64 #define RADIUS_TYPE_TUNNEL_MEDIUM_TYPE 65 #define RADIUS_TYPE_TUNNEL_CLIENT_ENDPOINT 66 #define RADIUS_TYPE_TUNNEL_SERVER_ENDPOINT 67 #define RADIUS_TYPE_ACCT_TUNNEL_CONNECTION 68 #define RADIUS_TYPE_TUNNEL_PASSWORD 69 #define RADIUS_TYPE_ARAP_PASSWORD 70 #define RADIUS_TYPE_ARAP_FEATURES 71 #define RADIUS_TYPE_ARAP_ZONE_ACCESS 72 #define RADIUS_TYPE_ARAP_SECURITY 73 #define RADIUS_TYPE_ARAP_SECURITY_DATA 74 #define RADIUS_TYPE_PASSWORD_RETRY 75 #define RADIUS_TYPE_PROMPT 76 #define RADIUS_TYPE_CONNECT_INFO 77 #define RADIUS_TYPE_CONFIGURATION_TOKEN 78 #define RADIUS_TYPE_EAP_MESSAGE 79 #define RADIUS_TYPE_MESSAGE_AUTHENTICATOR 80 #define RADIUS_TYPE_TUNNEL_PRIVATE_GROUP_ID 81 #define RADIUS_TYPE_TUNNEL_ASSIGNMENT_ID 82 #define RADIUS_TYPE_TUNNEL_PREFERENCE 83 #define RADIUS_TYPE_ARAP_CHALLENGE_RESPONSE 84 #define RADIUS_TYPE_ACCT_INTERIM_INTERVAL 85 #define RADIUS_TYPE_ACCT_TUNNEL_PACKETS_LOST 86 #define RADIUS_TYPE_NAS_PORT_ID 87 #define RADIUS_TYPE_FRAMED_POOL 88 /* unassigned 89 */ #define RADIUS_TYPE_TUNNEL_CLIENT_AUTH_ID 90 #define RADIUS_TYPE_TUNNEL_SERVER_AUTH_ID 91 /* unassigned 92-94 */ #define RADIUS_TYPE_NAS_IPV6_ADDRESS 95 #define RADIUS_TYPE_FRAMED_INTERFACE_ID 96 #define RADIUS_TYPE_FRAMED_IPV6_PREFIX 97 #define RADIUS_TYPE_LOGIN_IPV6_HOST 98 #define RADIUS_TYPE_FRAMED_IPV6_ROUTE 99 #define RADIUS_TYPE_FRAMED_IPV6_POOL 100 /* RFC 6911 3. Attributes */ #define RADIUS_TYPE_FRAMED_IPV6_ADDRESS 168 #define RADIUS_TYPE_DNS_SERVER_IPV6_ADDRESS 169 #define RADIUS_TYPE_ROUTE_IPV6_INFORMATION 170 #define RADIUS_TYPE_DELEGATED_IPV6_PREFIX_POOL 171 #define RADIUS_TYPE_STATEFUL_IPV6_ADDRESS_POOL 172 /* RFC 2865 5.7. Framed-Protocol */ #define RADIUS_FRAMED_PROTOCOL_PPP 1 /* PPP */ #define RADIUS_FRAMED_PROTOCOL_SLIP 2 /* SLIP */ #define RADIUS_FRAMED_PROTOCOL_ARAP 3 /* AppleTalk Remote Access * Protocol (ARAP) */ #define RADIUS_FRAMED_PROTOCOL_GANDALF 4 /* Gandalf proprietary * SingleLink/MultiLink * protocol */ #define RADIUS_FRAMED_PROTOCOL_XYLOGICS 5 /* Xylogics proprietary * IPX/SLIP */ #define RADIUS_FRAMED_PROTOCOL_X75 6 /* X.75 Synchronous */ /* RFC 2865 5.6. Service-Type */ #define RADIUS_SERVICE_TYPE_LOGIN 1 #define RADIUS_SERVICE_TYPE_FRAMED 2 #define RADIUS_SERVICE_TYPE_CB_LOGIN 3 #define RADIUS_SERVICE_TYPE_CB_FRAMED 4 #define RADIUS_SERVICE_TYPE_OUTBOUND 5 #define RADIUS_SERVICE_TYPE_ADMINISTRATIVE 6 #define RADIUS_SERVICE_TYPE_NAS_PROMPT 7 #define RADIUS_SERVICE_TYPE_AUTHENTICAT_ONLY 8 #define RADIUS_SERVICE_TYPE_CB_NAS_PROMPT 9 #define RADIUS_SERVICE_TYPE_CALL_CHECK 10 #define RADIUS_SERVICE_TYPE_CB_ADMINISTRATIVE 11 /* Microsoft vendor specific attributes: see RFC2548*/ #define RADIUS_VENDOR_MICROSOFT 311 #define RADIUS_VTYPE_MS_CHAP_RESPONSE 1 #define RADIUS_VTYPE_MS_CHAP_ERROR 2 #define RADIUS_VTYPE_MS_CHAP_PW_1 3 #define RADIUS_VTYPE_MS_CHAP_PW_2 4 #define RADIUS_VTYPE_MS_CHAP_LM_ENC_PW 5 #define RADIUS_VTYPE_MS_CHAP_NT_ENC_PW 6 #define RADIUS_VTYPE_MPPE_ENCRYPTION_POLICY 7 #define RADIUS_VTYPE_MPPE_ENCRYPTION_TYPES 8 #define RADIUS_VTYPE_MS_RAS_VENDOR 9 #define RADIUS_VTYPE_MS_CHAP_CHALLENGE 11 #define RADIUS_VTYPE_MS_CHAP_MPPE_KEYS 12 #define RADIUS_VTYPE_MS_BAP_USAGE 13 #define RADIUS_VTYPE_MS_LINK_UTILIZATION_THRESHOLD 14 #define RADIUS_VTYPE_MS_LINK_DROP_TIME_LIMIT 15 #define RADIUS_VTYPE_MPPE_SEND_KEY 16 #define RADIUS_VTYPE_MPPE_RECV_KEY 17 #define RADIUS_VTYPE_MS_RAS_VERSION 18 #define RADIUS_VTYPE_MS_OLD_ARAP_PASSWORD 19 #define RADIUS_VTYPE_MS_NEW_ARAP_PASSWORD 20 #define RADIUS_VTYPE_MS_ARAP_PASSWORD_CHANGE_REASON 21 #define RADIUS_VTYPE_MS_FILTER 22 #define RADIUS_VTYPE_MS_ACCT_AUTH_TYPE 23 #define RADIUS_VTYPE_MS_ACCT_EAP_TYPE 24 #define RADIUS_VTYPE_MS_CHAP2_RESPONSE 25 #define RADIUS_VTYPE_MS_CHAP2_SUCCESS 26 #define RADIUS_VTYPE_MS_CHAP2_PW 27 #define RADIUS_VTYPE_MS_PRIMARY_DNS_SERVER 28 #define RADIUS_VTYPE_MS_SECONDARY_DNS_SERVER 29 #define RADIUS_VTYPE_MS_PRIMARY_NBNS_SERVER 30 #define RADIUS_VTYPE_MS_SECONDARY_NBNS_SERVER 31 /* unassigned? 32 */ #define RADIUS_VTYPE_MS_ARAP_CHALLENGE 33 /* RFC 2865 5.41. NAS-Port-Type */ #define RADIUS_NAS_PORT_TYPE_ASYNC 0 /* Async */ #define RADIUS_NAS_PORT_TYPE_SYNC 1 /* Sync */ #define RADIUS_NAS_PORT_TYPE_ISDN_SYNC 2 /* ISDN Sync */ #define RADIUS_NAS_PORT_TYPE_ISDN_ASYNC_V120 3 /* ISDN Async V.120 */ #define RADIUS_NAS_PORT_TYPE_ISDN_ASYNC_V110 4 /* ISDN Async V.110 */ #define RADIUS_NAS_PORT_TYPE_VIRTUAL 5 /* Virtual */ #define RADIUS_NAS_PORT_TYPE_PIAFS 6 /* PIAFS */ #define RADIUS_NAS_PORT_TYPE_HDLC_CLEAR_CHANNEL 7 /* HDLC Clear Channel */ #define RADIUS_NAS_PORT_TYPE_X_25 8 /* X.25 */ #define RADIUS_NAS_PORT_TYPE_X_75 9 /* X.75 */ #define RADIUS_NAS_PORT_TYPE_G3_FAX 10 /* G.3 Fax */ #define RADIUS_NAS_PORT_TYPE_SDSL 11 /* SDSL - Symmetric DSL */ #define RADIUS_NAS_PORT_TYPE_ADSL_CAP 12 /* ADSL-CAP - Asymmetric * DSL, Carrierless * Amplitude Phase * Modulation */ #define RADIUS_NAS_PORT_TYPE_ADSL_DMT 13 /* ADSL-DMT - Asymmetric * DSL, Discrete * Multi-Tone */ #define RADIUS_NAS_PORT_TYPE_IDSL 14 /* IDSL - ISDN Digital * Subscriber Line */ #define RADIUS_NAS_PORT_TYPE_ETHERNET 15 /* Ethernet */ #define RADIUS_NAS_PORT_TYPE_XDSL 16 /* xDSL - Digital * Subscriber Line of * unknown type */ #define RADIUS_NAS_PORT_TYPE_CABLE 17 /* Cable */ #define RADIUS_NAS_PORT_TYPE_WIRELESS 18 /* Wireless - Other */ #define RADIUS_NAS_PORT_TYPE_WIRELESS_802_11 19 /* Wireless - IEEE * 802.11 */ /* RFC 2866 5.1. Acct-Status-Type */ #define RADIUS_ACCT_STATUS_TYPE_START 1 /* Start */ #define RADIUS_ACCT_STATUS_TYPE_STOP 2 /* Stop */ #define RADIUS_ACCT_STATUS_TYPE_INTERIM_UPDATE 3 /* Interim-Update */ #define RADIUS_ACCT_STATUS_TYPE_ACCT_ON 7 /* Accounting-On */ #define RADIUS_ACCT_STATUS_TYPE_ACCT_OFF 8 /* Accounting-Off */ /* RFC 2866 5.6. Acct-Authentic */ #define RADIUS_ACCT_AUTHENTIC_RADIUS 1 /* RADIUS */ #define RADIUS_ACCT_AUTHENTIC_LOCAL 2 /* Local */ #define RADIUS_ACCT_AUTHENTIC_REMOTE 3 /* Remote */ /* RFC 2866 5.10. Acct-Terminate-Cause */ #define RADIUS_TERMNATE_CAUSE_USER_REQUEST 1 /* User Request */ #define RADIUS_TERMNATE_CAUSE_LOST_CARRIER 2 /* Lost Carrier */ #define RADIUS_TERMNATE_CAUSE_LOST_SERVICE 3 /* Lost Service */ #define RADIUS_TERMNATE_CAUSE_IDLE_TIMEOUT 4 /* Idle Timeout */ #define RADIUS_TERMNATE_CAUSE_SESSION_TIMEOUT 5 /* Session Timeout */ #define RADIUS_TERMNATE_CAUSE_ADMIN_RESET 6 /* Admin Reset */ #define RADIUS_TERMNATE_CAUSE_ADMIN_REBOOT 7 /* Admin Reboot */ #define RADIUS_TERMNATE_CAUSE_PORT_ERROR 8 /* Port Error */ #define RADIUS_TERMNATE_CAUSE_NAS_ERROR 9 /* NAS Error */ #define RADIUS_TERMNATE_CAUSE_NAS_RESET 10 /* NAS Request */ #define RADIUS_TERMNATE_CAUSE_NAS_REBOOT 11 /* NAS Reboot */ #define RADIUS_TERMNATE_CAUSE_PORT_UNNEEDED 12 /* Port Unneeded */ #define RADIUS_TERMNATE_CAUSE_PORT_PREEMPTED 13 /* Port Preempted */ #define RADIUS_TERMNATE_CAUSE_PORT_SUSPENDED 14 /* Port Suspended */ #define RADIUS_TERMNATE_CAUSE_SERVICE_UNAVAIL 15 /* Service Unavailable */ #define RADIUS_TERMNATE_CAUSE_CALLBACK 16 /* Callback */ #define RADIUS_TERMNATE_CAUSE_USER_ERROR 17 /* User Error */ #define RADIUS_TERMNATE_CAUSE_HOST_REQUEST 18 /* Host Request */ /* RFC 2868 3.1. Tunnel-Type */ #define RADIUS_TUNNEL_TYPE_PPTP 1 /* Point-to-Point Tunneling * Protocol (PPTP) */ #define RADIUS_TUNNEL_TYPE_L2F 2 /* Layer Two Forwarding (L2F) */ #define RADIUS_TUNNEL_TYPE_L2TP 3 /* Layer Two Tunneling * Protocol (L2TP) */ #define RADIUS_TUNNEL_TYPE_ATMP 4 /* Ascend Tunnel Management * Protocol (ATMP) */ #define RADIUS_TUNNEL_TYPE_VTP 5 /* Virtual Tunneling Protocol * (VTP) */ #define RADIUS_TUNNEL_TYPE_AH 6 /* IP Authentication Header in * the Tunnel-mode (AH) */ #define RADIUS_TUNNEL_TYPE_IP 7 /* IP-in-IP Encapsulation * (IP-IP) */ #define RADIUS_TUNNEL_TYPE_MOBILE 8 /* Minimal IP-in-IP * Encapsulation (MIN-IP-IP) */ #define RADIUS_TUNNEL_TYPE_ESP 9 /* IP Encapsulating Security * Payload in the Tunnel-mode * (ESP) */ #define RADIUS_TUNNEL_TYPE_GRE 10 /* Generic Route Encapsulation * (GRE) */ #define RADIUS_TUNNEL_TYPE_VDS 11 /* Bay Dial Virtual Services * (DVS) */ #define RADIUS_TUNNEL_TYPE_IPIP 12 /* IP-in-IP Tunneling */ /* RFC 2868 3.2. Tunnel-Medium-Type */ #define RADIUS_TUNNEL_MEDIUM_TYPE_IPV4 1 /* IPv4 (IP version 4) */ #define RADIUS_TUNNEL_MEDIUM_TYPE_IPV6 2 /* IPv6 (IP version 6) */ #define RADIUS_TUNNEL_MEDIUM_TYPE_NSAP 3 /* NSAP */ #define RADIUS_TUNNEL_MEDIUM_TYPE_HDLC 4 /* HDLC (8-bit * multidrop) */ #define RADIUS_TUNNEL_MEDIUM_TYPE_BBN1822 5 /* BBN 1822 */ #define RADIUS_TUNNEL_MEDIUM_TYPE_802 6 /* 802 (includes all 802 * media plus Ethernet * "canonical format")*/ #define RADIUS_TUNNEL_MEDIUM_TYPE_E163 7 /* E.163 (POTS) */ #define RADIUS_TUNNEL_MEDIUM_TYPE_E164 8 /* E.164 (SMDS, Frame * Relay, ATM) */ #include <sys/socket.h> #include <sys/cdefs.h> #include <stdbool.h> #include <stdint.h> struct in_addr; struct in6_addr; __BEGIN_DECLS /******* packet manipulation support *******/ typedef struct _RADIUS_PACKET RADIUS_PACKET; /* constructors */ RADIUS_PACKET *radius_new_request_packet(uint8_t); RADIUS_PACKET *radius_new_response_packet(uint8_t, const RADIUS_PACKET *); RADIUS_PACKET *radius_convert_packet(const void *, size_t); /* destructor */ int radius_delete_packet(RADIUS_PACKET *); /* accessors - header values */ uint8_t radius_get_id(const RADIUS_PACKET *); void radius_update_id(RADIUS_PACKET * packet); void radius_set_id(RADIUS_PACKET *, uint8_t); uint8_t radius_get_code(const RADIUS_PACKET *); void radius_get_authenticator(const RADIUS_PACKET *, void *); void radius_set_request_packet(RADIUS_PACKET *, const RADIUS_PACKET *); const RADIUS_PACKET * radius_get_request_packet(const RADIUS_PACKET *); int radius_check_response_authenticator(const RADIUS_PACKET *, const char *); int radius_check_accounting_request_authenticator( const RADIUS_PACKET *, const char *); uint8_t *radius_get_authenticator_retval(const RADIUS_PACKET *); uint8_t *radius_get_request_authenticator_retval(const RADIUS_PACKET *); void radius_set_accounting_request_authenticator(RADIUS_PACKET *, const char *); void radius_set_response_authenticator(RADIUS_PACKET *, const char *); uint16_t radius_get_length(const RADIUS_PACKET *); const void *radius_get_data(const RADIUS_PACKET *); int radius_get_raw_attr(const RADIUS_PACKET *, uint8_t, void *, size_t *); int radius_get_vs_raw_attr(const RADIUS_PACKET *, uint32_t, uint8_t, void *, size_t *); int radius_put_raw_attr(RADIUS_PACKET *, uint8_t, const void *, size_t); int radius_put_vs_raw_attr(RADIUS_PACKET *, uint32_t, uint8_t, const void *, size_t); int radius_get_raw_attr_ptr(const RADIUS_PACKET *, uint8_t, const void **, size_t *); int radius_get_vs_raw_attr_ptr(const RADIUS_PACKET *, uint32_t, uint8_t, const void **, size_t *); int radius_get_raw_attr_cat(const RADIUS_PACKET *, uint8_t, void *, size_t *); int radius_get_vs_raw_attr_cat(const RADIUS_PACKET *, uint32_t, uint8_t, void *, size_t *); int radius_put_raw_attr_cat(RADIUS_PACKET *, uint8_t, const void *, size_t); int radius_put_vs_raw_attr_cat(RADIUS_PACKET *, uint32_t, uint8_t, const void *, size_t); int radius_set_raw_attr(RADIUS_PACKET *, uint8_t, const void *, size_t); int radius_set_vs_raw_attr(RADIUS_PACKET *, uint32_t, uint8_t, const void *, size_t); int radius_del_attr_all(RADIUS_PACKET *, uint8_t); int radius_del_vs_attr_all(RADIUS_PACKET *, uint32_t, uint8_t); bool radius_has_attr(const RADIUS_PACKET *, uint8_t); bool radius_has_vs_attr(const RADIUS_PACKET *, uint32_t, uint8_t); /* typed attribute accessor (string) */ int radius_get_string_attr(const RADIUS_PACKET *, uint8_t, char *, size_t); int radius_get_vs_string_attr(const RADIUS_PACKET *, uint32_t, uint8_t, char *, size_t); int radius_put_string_attr(RADIUS_PACKET *, uint8_t, const char *); int radius_put_vs_string_attr(RADIUS_PACKET *, uint32_t, uint8_t, const char *); /* typed attribute accessor (uint16_t) */ int radius_get_uint16_attr(const RADIUS_PACKET *, uint8_t, uint16_t *); int radius_get_vs_uint16_attr(const RADIUS_PACKET *, uint32_t, uint8_t, uint16_t *); int radius_put_uint16_attr(RADIUS_PACKET *, uint8_t, const uint16_t); int radius_put_vs_uint16_attr(RADIUS_PACKET *, uint32_t, uint8_t, const uint16_t); int radius_set_uint16_attr(RADIUS_PACKET *, uint8_t, const uint16_t); int radius_set_vs_uint16_attr(RADIUS_PACKET *, uint32_t, uint8_t, const uint16_t); /* typed attribute accessor (uint32_t) */ int radius_get_uint32_attr(const RADIUS_PACKET *, uint8_t, uint32_t *); int radius_get_vs_uint32_attr(const RADIUS_PACKET *, uint32_t, uint8_t, uint32_t *); int radius_put_uint32_attr(RADIUS_PACKET *, uint8_t, const uint32_t); int radius_put_vs_uint32_attr(RADIUS_PACKET *, uint32_t, uint8_t, const uint32_t); int radius_set_uint32_attr(RADIUS_PACKET *, uint8_t, const uint32_t); int radius_set_vs_uint32_attr(RADIUS_PACKET *, uint32_t, uint8_t, const uint32_t); /* typed attribute accessor (uint64_t) */ int radius_get_uint64_attr(const RADIUS_PACKET *, uint8_t, uint64_t *); int radius_get_vs_uint64_attr(const RADIUS_PACKET *, uint32_t, uint8_t, uint64_t *); int radius_put_uint64_attr(RADIUS_PACKET *, uint8_t, const uint64_t); int radius_put_vs_uint64_attr(RADIUS_PACKET *, uint32_t, uint8_t, const uint64_t); int radius_set_uint64_attr(RADIUS_PACKET *, uint8_t, const uint64_t); int radius_set_vs_uint64_attr(RADIUS_PACKET *, uint32_t, uint8_t, const uint64_t); /* typed attribute accessor (ipv4) */ int radius_get_ipv4_attr(const RADIUS_PACKET *, uint8_t, struct in_addr *); int radius_get_vs_ipv4_attr(const RADIUS_PACKET *, uint32_t, uint8_t, struct in_addr *); int radius_put_ipv4_attr(RADIUS_PACKET *, uint8_t, const struct in_addr); int radius_put_vs_ipv4_attr(RADIUS_PACKET *, uint32_t, uint8_t, const struct in_addr); int radius_set_ipv4_attr(RADIUS_PACKET *, uint8_t, const struct in_addr); int radius_set_vs_ipv4_attr(RADIUS_PACKET *, uint32_t, uint8_t, const struct in_addr); /* typed attribute accessor (ipv6) */ int radius_get_ipv6_attr(const RADIUS_PACKET *, uint8_t, struct in6_addr *); int radius_get_vs_ipv6_attr(const RADIUS_PACKET *, uint32_t, uint8_t, struct in6_addr *); int radius_put_ipv6_attr(RADIUS_PACKET *, uint8_t, const struct in6_addr *); int radius_put_vs_ipv6_attr(RADIUS_PACKET *, uint32_t, uint8_t, const struct in6_addr *); int radius_set_ipv6_attr(RADIUS_PACKET *, uint8_t, const struct in6_addr *); int radius_set_vs_ipv6_attr(RADIUS_PACKET *, uint32_t, uint8_t, const struct in6_addr *); /* message authenticator */ int radius_put_message_authenticator(RADIUS_PACKET *, const char *); int radius_set_message_authenticator(RADIUS_PACKET *, const char *); int radius_check_message_authenticator(RADIUS_PACKET *, const char *); /* encryption */ int radius_encrypt_user_password_attr(void *, size_t *, const char *, const void *, const char *); int radius_decrypt_user_password_attr(char *, size_t, const void *, size_t, const void *, const char *); int radius_encrypt_mppe_key_attr(void *, size_t *, const void *, size_t, const void *, const char *); int radius_decrypt_mppe_key_attr(void *, size_t *, const void *, size_t, const void *, const char *); /* encrypted attribute */ int radius_get_user_password_attr(const RADIUS_PACKET *, char *, size_t, const char *); int radius_put_user_password_attr(RADIUS_PACKET *, const char *, const char *); int radius_get_mppe_send_key_attr(const RADIUS_PACKET *, void *, size_t *, const char *); int radius_put_mppe_send_key_attr(RADIUS_PACKET *, const void *, size_t, const char *); int radius_get_mppe_recv_key_attr(const RADIUS_PACKET *, void *, size_t *, const char *); int radius_put_mppe_recv_key_attr(RADIUS_PACKET *, const void *, size_t, const char *); int radius_get_eap_msk(const RADIUS_PACKET *, void *, size_t *, const char *); /* helpers */ RADIUS_PACKET *radius_recvfrom(int, int, struct sockaddr *, socklen_t *); int radius_sendto(int, const RADIUS_PACKET *, int flags, const struct sockaddr *, socklen_t); RADIUS_PACKET *radius_recv(int, int); int radius_send(int, const RADIUS_PACKET *, int); RADIUS_PACKET *radius_recvmsg(int, struct msghdr *, int); int radius_sendmsg(int, const RADIUS_PACKET *, const struct msghdr *, int); __END_DECLS #endif