📄 rsvp.h
字号:
u_char errs_code; /* Error Code (def'd below) */ u_int16_t errs_value; /* Error Value */#define ERR_FORWARD_OK 0x8000 /* Flag: OK to forward state */#define Error_Usage(x) (((x)>>12)&3)#define ERR_Usage_globl 0x00 /* Globally-defined sub-code */#define ERR_Usage_local 0x10 /* Locally-defined sub-code */#define ERR_Usage_serv 0x11 /* Service-defined sub-code */#define ERR_global_mask 0x0fff /* Sub-code bits in Error Val */} ERROR_SPEC_ipv4;#ifdef USE_IPV6typedef struct { struct in6_addr errs_errnode; /* Error Node Address */ u_char errs_flags; /* Flags: */ u_char errs_code; /* Error Code (def'd below) */ u_int16_t errs_value; /* Error Value */} ERROR_SPEC_ipv6;#endif /* USE_IPV6 */typedef struct { Object_header errs_header; union { ERROR_SPEC_ipv4 errs_ipv4;#ifdef USE_IPV6 ERROR_SPEC_ipv6 errs_ipv6;#endif /* USE_IPV6 */ } errs_u;} ERROR_SPEC;#define errspec4_enode errs_u.errs_ipv4.errs_errnode#define errspec4_code errs_u.errs_ipv4.errs_code#define errspec4_value errs_u.errs_ipv4.errs_value#define errspec4_flags errs_u.errs_ipv4.errs_flags#define errspec6_enode errs_u.errs_ipv6.errs_errnode#define errspec6_code errs_u.errs_ipv6.errs_code#define errspec6_value errs_u.errs_ipv6.errs_value#define errspec6_flags errs_u.errs_ipv6.errs_flags/* * SCOPE object class */#define ctype_SCOPE_list_ipv4 1#define ctype_SCOPE_list_ipv6 2typedef struct { struct in_addr scopl_ipaddr[1]; /* var-len list of IP sender addrs */} SCOPE_list_ipv4;#ifdef USE_IPV6typedef struct { struct in6_addr scopl_ipaddr[1]; /* var-len list of IP sender addrs */} SCOPE_list_ipv6;#endif /* USE_IPV6 */typedef struct { Object_header scopl_header; union { SCOPE_list_ipv4 scopl_ipv4;#ifdef USE_IPV6 SCOPE_list_ipv6 scopl_ipv6;#endif /* USE_IPV6 */ } scope_u;} SCOPE;#define scope4_addr scope_u.scopl_ipv4.scopl_ipaddr#define scope6_addr scope_u.scopl_ipv6.scopl_ipaddr/* * INTEGRITY object class * */#define ctype_INTEGRITY_MD5 1#define KEYID_LENG 8 /* Length of Key Identifier (Bytes) */#define SEQNO_LENG 2 /* Length of Seq Number (32b Int) */#define MD5_LENG 16 /* Length of MD5 digest (Bytes) */typedef struct { u_char intg_keyid[KEYID_LENG]; /* Key Id */ u_int32_t intg_seqno[SEQNO_LENG]; /* Sequence #: avoid replay */ u_char intg_digest[MD5_LENG]; /* MD5 Digest */} INTEGRITY_MD5;typedef struct { Object_header intgr_header; INTEGRITY_MD5 intgr_u;} INTEGRITY;#define intgr_keyid intgr_u.intg_keyid#define intgr_seqno intgr_u.intg_seqno#define intgr_digest intgr_u.intg_digest/* * CONFIRM object class */#define ctype_CONFIRM_ipv4 1#define ctype_CONFIRM_ipv6 2typedef struct { struct in_addr recv_ipaddr; /* Receiver requesting confirm'n */} CONFIRM_ipv4;#ifdef USE_IPV6typedef struct { struct in6_addr recv_ipaddr; /* Receiver requesting confirm'n */} CONFIRM_ipv6;#endif /* USE_IPV6 */typedef struct { Object_header conf_header; union { CONFIRM_ipv4 conf_ipv4;#ifdef USE_IPV6 CONFIRM_ipv6 conf_ipv6;#endif /* USE_IPV6 */ } conf_u;} CONFIRM;#define conf4_addr conf_u.conf_ipv4.recv_ipaddr#define conf6_addr conf_u.conf_ipv6.recv_ipaddr/* * FLOWSPEC class object * * Opaque to RSVP -- Contents defined in rapi_lib.h */#define ctype_FLOWSPEC_Intserv0 2 /* The int-serv flowspec (v.0)*/#include "rapi_lib.h"typedef IS_specbody_t FLOWSPEC_Intserv0;typedef struct { Object_header flow_header; FLOWSPEC_Intserv0 flow_body; /* Defined in rapi_lib.h */} FLOWSPEC;/* * SENDER_TSPEC class object * * Opaque to RSVP -- Contents defined in rapi_lib.h */#define ctype_SENDER_TSPEC_CTYPE 2typedef IS_tspbody_t SENDER_TSPEC_CTYPE;typedef struct { Object_header stspec_header; SENDER_TSPEC_CTYPE stspec_body; /* Defined in rapi_lib.h */} SENDER_TSPEC;/* * ADSPEC class object * * Opaque to RSVP -- Contents defined in rapi_lib.h */#define ctype_ADSPEC_INTSERV 2typedef IS_adsbody_t ADSPEC_INTSERV;typedef struct { Object_header adspec_header; ADSPEC_INTSERV adspec_body; /* Defined in rapi_lib.h */} ADSPEC;/* * POLICY_DATA object class * * Opaque RSVP -- Contents will be defined elsewhere */#define ctype_POLICY_DATA_CTYPE 1typedef u_int32_t POLICY_DATA_CTYPE;typedef struct { Object_header policy_d_header; POLICY_DATA_CTYPE data;} POLICY_DATA;/* Objects for diagnostics support * refer internet draft specification *//* * ROUTE Object class (Object used in Diagnostic messages) */#define ctype_ROUTE_ipv4 1#define ctype_ROUTE_ip6 2typedef struct { u_int16_t reserved; u_char reserved2; u_char R_pointer; struct in_addr route_addr_list[1]; /* Var len address list */} ROUTE_ipv4;typedef struct { Object_header route_header; union { ROUTE_ipv4 route_ipv4; /* Route_IP6 route_ip6; */ } route_u;} ROUTE;#define R_pointer_ipv4 route_u.route_ipv4.R_pointer#define route(x, i) (x)->route_u.route_ipv4.route_addr_list[i]/* * DIAGNOSTIC RESPONSE (DREP) Object Class */#define ctype_DIAG_RESPONSE_ipv4 1#define ctype_DIAG_RESPONSE_ip6 2typedef struct { u_int32_t resp_arrival_time; /* DREQ arrival time */ struct in_addr resp_inc_addr; /* addr of incoming-iface */ struct in_addr resp_outg_addr; /* addr of outgoing iface */ struct in_addr resp_prev_addr; /* addr of previous hop */ /* RSVP router */ style_t resp_resv_style; /* reservation style */ u_char resp_D_TTL; /* rsvp_send_ttl - ip_ttl */ /* for this hop */ u_char resp_R_error; /* M + error mesg + K value */ u_int16_t resp_timer; /* local refresh timer value */} DIAG_RESPONSE_ipv4;typedef struct { Object_header resp_header; union { DIAG_RESPONSE_ipv4 resp_ipv4;/* Response_IP6 resp_ip6; */ } resp_u;} DIAG_RESPONSE;#define resp_rstyle resp_u.resp_ipv4.resp_resv_style#define resp_in_addr resp_u.resp_ipv4.resp_inc_addr#define resp_out_addr resp_u.resp_ipv4.resp_outg_addr#define resp_pre_addr resp_u.resp_ipv4.resp_prev_addr#define resp_Rerror resp_u.resp_ipv4.resp_R_error#define resp_timeval resp_u.resp_ipv4.resp_timer#define resp_arrtime resp_u.resp_ipv4.resp_arrival_time#define resp_DTTL resp_u.resp_ipv4.resp_D_TTL#define DIAG_RESPONSE_MFLAG(x) (((x)->resp_Rerror & 0x80) >> 7)#define DIAG_RESPONSE_RERROR(x) (((x)->resp_Rerror & 0x70) >> 4)#define DIAG_RESPONSE_K(x) ((x)->resp_Rerror & 0x0F)#define DRESP_BASIC_SIZE sizeof(DIAG_RESPONSE) /* * DIAGNOSTIC object class -- diagnostic request header */#define ctype_DIAGNOSTIC_ipv4 1#define ctype_DIAGNOSTIC_ip6 2typedef struct { u_char diag_max_hops; /* max number of RSVP hops */ u_char diag_hop_count; /* # of RSVP hops */ u_char diag_mttl; /* multicast TTL */ u_char diag_reply_mode; /* the last bit of this field * indicates how the reply * should be returned */ u_int16_t diag_path_MTU; u_int16_t diag_frag_offset; u_int32_t diag_msg_ID; /* Unique message ID */ FILTER_SPEC diag_source_filtp; /* FILTER SPEC, sender host */ struct in_addr diag_lasthop_addr; /* IP address of last hop */ FILTER_SPEC diag_resp_addr; /* diag client address to send DREP */ } DIAGNOSTIC_ipv4;typedef struct { Object_header diag_header; union { DIAGNOSTIC_ipv4 diag_ipv4;/* Diagnostic_IP6 diag_ip6; */ } diag_u; } DIAGNOSTIC;#define diag_replymode diag_u.diag_ipv4.diag_reply_mode#define diag_saddr diag_u.diag_ipv4.diag_source_filtp.filt4_srcaddr#define diag_sfiltp diag_u.diag_ipv4.diag_source_filtp#define diag_sport diag_u.diag_ipv4.diag_source_filtp.filt4_srcport#define diag_msgID diag_u.diag_ipv4.diag_msg_ID#define diag_rfiltp diag_u.diag_ipv4.diag_resp_addr#define diag_raddr diag_u.diag_ipv4.diag_resp_addr.filt4_srcaddr#define diag_rport diag_u.diag_ipv4.diag_resp_addr.filt4_srcport#define diag_laddr diag_u.diag_ipv4.diag_lasthop_addr#define diag_maxhops diag_u.diag_ipv4.diag_max_hops#define diag_ttl diag_u.diag_ipv4.diag_mttl#define diag_hopcount diag_u.diag_ipv4.diag_hop_count#define diag_pMTU diag_u.diag_ipv4.diag_path_MTU#define diag_frag_off diag_u.diag_ipv4.diag_frag_offset#define DIAG_MFBIT(x) ((x)->diag_replymode & 0x01 )#define DIAG_HBIT(x) (((x)->diag_replymode & 0x02) >> 1 ) /* End of object definitions for diagnostics */ #ifdef __MAIN__/* * Vector of maximum defined C-Type value per Class-Num */int CType_max[class_MAX+1] = { 255, ctype_SESSION_ipv6GPI, 0 /* XXX Sess group */, ctype_RSVP_HOP_ipv6, 0 /* XXX Integrity */, ctype_TIME_VALUES_CTYPE, ctype_ERROR_SPEC_ipv6, ctype_SCOPE_list_ipv6, ctype_STYLE_CTYPE, ctype_FLOWSPEC_Intserv0, ctype_FILTER_SPEC_ipv6GPI, ctype_SENDER_TEMPLATE_ipv6GPI, ctype_SENDER_TSPEC_CTYPE, ctype_ADSPEC_INTSERV, 0 /* XXX POLICY_DATA */, ctype_CONFIRM_ipv6, 0 , 0, 0 , 0, 0 , 0, 0 , 0, 0 , 0, 0 , 0, 0 , 0, ctype_DIAGNOSTIC_ip6 , 255, /* ROUTE */ ctype_DIAG_RESPONSE_ip6};#endif /* * Useful definitions */#define FilterSpec FILTER_SPEC#define FlowSpec FLOWSPEC#define Authentication POLICY_DATA#define PolicyData POLICY_DATA/* RSVP error codes */#define RSVP_Err_NONE 0 /* No error (CONFIRM) */#define RSVP_Erv_Nonev 0 /* No-error Error Value */#define RSVP_Err_ADMISSION 1 /* Admission Control failure */ /* Globally-defined sub-codes: */#define RSVP_Erv_Other 0 /* Unspecified cause */#define RSVP_Erv_DelayBnd 1 /* Cannot meet delay bound req */#define RSVP_Erv_Bandwidth 2 /* Insufficient bandwidth */#define RSVP_Erv_MTU 3 /* MTU in flowspec too large */#define RSVP_Err_POLICY 2 /* Policy control failure */ /* Globally-defined sub-codes: TBD */#define RSVP_Err_NO_PATH 3 /* No path state for Resv */#define RSVP_Err_NO_SENDER 4 /* No sender info for Resv */#define RSVP_Err_BAD_STYLE 5 /* Conflicting style */#define RSVP_Err_UNKNOWN_STYLE 6 /* Unknown reservation style */#define RSVP_Err_BAD_DSTPORT 7 /* Conflicting DstPort in Sess */#define RSVP_Err_BAD_SNDPORT 8 /* Conflicting Sender Port */#define RSVP_Err_PREEMPTED 12 /* Service Preempted */#define RSVP_Err_UNKN_OBJ_CLASS 13 /* Unknown object Class-Num */ /* ErrVal = Class_num, CType */#define RSVP_Err_UNKNOWN_CTYPE 14 /* Unknown object C-Type */ /* ErrVal = Class_num, CType */#define RSVP_Err_API_ERROR 20 /* API client error */ /* ErrVal = API error code */#define RSVP_Err_TC_ERROR 21 /* Traffic Control error */#define RSVP_Erv_Conflict_Serv 01 /* Service Conflict */#define RSVP_Erv_No_Serv 02 /* Unknown Service */#define RSVP_Erv_Crazy_Flowspec 03 /* Unreasonable Flowspec */#define RSVP_Erv_Crazy_Tspec 04 /* Unreasonable Tspec */#define RSVP_Err_TC_SYS_ERROR 22 /* Traffic control system error */ /* ErrVal = kernel error code */#define RSVP_Err_RSVP_SYS_ERROR 23 /* RSVSystem error */#define RSVP_Erv_MEMORY 1 /* Out of memory */#define RSVP_Erv_API 2 /* API logic error *//* Error values for diagnostics * */#define RSVP_Erv_Diag_NOPATH 0x01 /* No PATH for diagnosed sender */#define RSVP_Erv_Diag_MTUBIG 0x02 /* DREQ packet size exceeded path MTU */#define RSVP_Erv_Diag_ROUTEBIG 0x04 /* ROUTE object size causes DREP * length to exceed path MTU */ #endif /* __rsvp_h__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -