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>