File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / quagga / isisd / isis_pdu.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:26:11 2012 UTC (12 years, 5 months ago) by misho
Branches: quagga, MAIN
CVS tags: v0_99_20_1, v0_99_20, HEAD
quagga

    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>