Annotation of embedaddon/quagga/isisd/isis_pdu.h, revision 1.1
1.1 ! misho 1: /*
! 2: * IS-IS Rout(e)ing protocol - isis_pdu.h
! 3: * PDU processing
! 4: *
! 5: * Copyright (C) 2001,2002 Sampo Saaristo
! 6: * Tampere University of Technology
! 7: * Institute of Communications Engineering
! 8: *
! 9: * This program is free software; you can redistribute it and/or modify it
! 10: * under the terms of the GNU General Public Licenseas published by the Free
! 11: * Software Foundation; either version 2 of the License, or (at your option)
! 12: * any later version.
! 13: *
! 14: * This program is distributed in the hope that it will be useful,but WITHOUT
! 15: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
! 16: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
! 17: * more details.
! 18:
! 19: * You should have received a copy of the GNU General Public License along
! 20: * with this program; if not, write to the Free Software Foundation, Inc.,
! 21: * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
! 22: */
! 23:
! 24: #ifndef _ZEBRA_ISIS_PDU_H
! 25: #define _ZEBRA_ISIS_PDU_H
! 26:
! 27: #ifdef __SUNPRO_C
! 28: #pragma pack(1)
! 29: #endif
! 30:
! 31: /*
! 32: * ISO 9542 - 7.5,7.6
! 33: *
! 34: * ES to IS Fixed Header
! 35: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 36: * | Intradomain Routeing Protocol Discriminator |
! 37: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 38: * | Length Indicator |
! 39: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 40: * | Version/Protocol ID extension |
! 41: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 42: * | Reserved = 0 |
! 43: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 44: * | 0 | 0 | 0 | PDU Type |
! 45: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 46: * | Holding Time | 2
! 47: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 48: * | Checksum | 2
! 49: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 50: */
! 51:
! 52: struct esis_fixed_hdr
! 53: {
! 54: u_char idrp;
! 55: u_char length;
! 56: u_char version;
! 57: u_char id_len;
! 58: u_char pdu_type;
! 59: u_int16_t holdtime;
! 60: u_int16_t checksum;
! 61: } __attribute__ ((packed));
! 62:
! 63: #define ESIS_FIXED_HDR_LEN 9
! 64:
! 65: #define ESH_PDU 2
! 66: #define ISH_PDU 4
! 67: #define RD_PDU 5
! 68:
! 69: /*
! 70: * IS to IS Fixed Header
! 71: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 72: * | Intradomain Routeing Protocol Discriminator |
! 73: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 74: * | Length Indicator |
! 75: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 76: * | Version/Protocol ID extension |
! 77: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 78: * | R | R | R | PDU Type |
! 79: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 80: * | Version |
! 81: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 82: * | Reserved |
! 83: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 84: * | Maximum Area Addresses |
! 85: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 86: */
! 87:
! 88: struct isis_fixed_hdr
! 89: {
! 90: u_char idrp;
! 91: u_char length;
! 92: u_char version1;
! 93: u_char id_len;
! 94: u_char pdu_type;
! 95: u_char version2;
! 96: u_char reserved;
! 97: u_char max_area_addrs;
! 98: };
! 99:
! 100: #define ISIS_FIXED_HDR_LEN 8
! 101:
! 102: /*
! 103: * IS-IS PDU types.
! 104: */
! 105:
! 106: #define L1_LAN_HELLO 15
! 107: #define L2_LAN_HELLO 16
! 108: /*
! 109: * L1 and L2 LAN IS to IS Hello PDU header
! 110: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 111: * | Reserved | Circuit Type | 1
! 112: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 113: * + Source ID + id_len
! 114: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 115: * | Holding Time | 2
! 116: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 117: * | PDU Lenght | 2
! 118: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 119: * | R | Priority | 1
! 120: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 121: * | LAN ID | id_len + 1
! 122: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 123: */
! 124: struct isis_lan_hello_hdr
! 125: {
! 126: u_char circuit_t;
! 127: u_char source_id[ISIS_SYS_ID_LEN];
! 128: u_int16_t hold_time;
! 129: u_int16_t pdu_len;
! 130: u_char prio;
! 131: u_char lan_id[ISIS_SYS_ID_LEN + 1];
! 132: } __attribute__ ((packed));
! 133: #define ISIS_LANHELLO_HDRLEN 19
! 134:
! 135: #define P2P_HELLO 17
! 136: /*
! 137: * Point-to-point IS to IS hello PDU header
! 138: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 139: * | Reserved | Circuit Type | 1
! 140: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 141: * + Source ID + id_len
! 142: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 143: * + Holding Time + 2
! 144: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 145: * + PDU Lenght + 2
! 146: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 147: * | Local Circuit ID | 1
! 148: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 149: */
! 150: struct isis_p2p_hello_hdr
! 151: {
! 152: u_char circuit_t;
! 153: u_char source_id[ISIS_SYS_ID_LEN];
! 154: u_int16_t hold_time;
! 155: u_int16_t pdu_len;
! 156: u_char local_id;
! 157: } __attribute__ ((packed));
! 158: #define ISIS_P2PHELLO_HDRLEN 12
! 159:
! 160: #define L1_LINK_STATE 18
! 161: #define L2_LINK_STATE 20
! 162: /*
! 163: * L1 and L2 IS to IS link state PDU header
! 164: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 165: * + PDU Length + 2
! 166: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 167: * + Remaining Lifetime + 2
! 168: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 169: * | LSP ID | id_len + 2
! 170: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 171: * + Sequence Number + 4
! 172: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 173: * + Checksum + 2
! 174: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 175: * | P | ATT |LSPDBOL| ISTYPE |
! 176: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 177: */
! 178: struct isis_link_state_hdr
! 179: {
! 180: u_int16_t pdu_len;
! 181: u_int16_t rem_lifetime;
! 182: u_char lsp_id[ISIS_SYS_ID_LEN + 2];
! 183: u_int32_t seq_num;
! 184: u_int16_t checksum;
! 185: u_int8_t lsp_bits;
! 186: } __attribute__ ((packed));
! 187: #define ISIS_LSP_HDR_LEN 19
! 188:
! 189: #define L1_COMPLETE_SEQ_NUM 24
! 190: #define L2_COMPLETE_SEQ_NUM 25
! 191: /*
! 192: * L1 and L2 IS to IS complete sequence numbers PDU header
! 193: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 194: * + PDU Lenght + 2
! 195: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 196: * + Source ID + id_len + 1
! 197: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 198: * + Start LSP ID + id_len + 2
! 199: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 200: * + End LSP ID + id_len + 2
! 201: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 202: */
! 203: struct isis_complete_seqnum_hdr
! 204: {
! 205: u_int16_t pdu_len;
! 206: u_char source_id[ISIS_SYS_ID_LEN + 1];
! 207: u_char start_lsp_id[ISIS_SYS_ID_LEN + 2];
! 208: u_char stop_lsp_id[ISIS_SYS_ID_LEN + 2];
! 209: };
! 210: #define ISIS_CSNP_HDRLEN 25
! 211:
! 212: #define L1_PARTIAL_SEQ_NUM 26
! 213: #define L2_PARTIAL_SEQ_NUM 27
! 214: /*
! 215: * L1 and L2 IS to IS partial sequence numbers PDU header
! 216: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 217: * + PDU Length + 2
! 218: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 219: * + Source ID + id_len + 1
! 220: * +---------------------------------------------------------------+
! 221: */
! 222: struct isis_partial_seqnum_hdr
! 223: {
! 224: u_int16_t pdu_len;
! 225: u_char source_id[ISIS_SYS_ID_LEN + 1];
! 226: };
! 227: #define ISIS_PSNP_HDRLEN 9
! 228:
! 229: #ifdef __SUNPRO_C
! 230: #pragma pack()
! 231: #endif
! 232:
! 233: /*
! 234: * Function for receiving IS-IS PDUs
! 235: */
! 236: int isis_receive (struct thread *thread);
! 237:
! 238: /*
! 239: * calling arguments for snp_process ()
! 240: */
! 241: #define ISIS_SNP_PSNP_FLAG 0
! 242: #define ISIS_SNP_CSNP_FLAG 1
! 243:
! 244: /*
! 245: * Sending functions
! 246: */
! 247: int send_lan_l1_hello (struct thread *thread);
! 248: int send_lan_l2_hello (struct thread *thread);
! 249: int send_p2p_hello (struct thread *thread);
! 250: int send_csnp (struct isis_circuit *circuit, int level);
! 251: int send_l1_csnp (struct thread *thread);
! 252: int send_l2_csnp (struct thread *thread);
! 253: int send_l1_psnp (struct thread *thread);
! 254: int send_l2_psnp (struct thread *thread);
! 255: int send_lsp (struct thread *thread);
! 256: int ack_lsp (struct isis_link_state_hdr *hdr,
! 257: struct isis_circuit *circuit, int level);
! 258: void fill_fixed_hdr (struct isis_fixed_hdr *hdr, u_char pdu_type);
! 259: int send_hello (struct isis_circuit *circuit, int level);
! 260:
! 261:
! 262: int authentication_check (struct isis_passwd *one,
! 263: struct isis_passwd *theother);
! 264:
! 265: #endif /* _ZEBRA_ISIS_PDU_H */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>