Annotation of embedaddon/quagga/ospfd/ospf_packet.h, revision 1.1

1.1     ! misho       1: /*
        !             2:  * OSPF Sending and Receiving OSPF Packets.
        !             3:  * Copyright (C) 1999 Toshiaki Takada
        !             4:  *
        !             5:  * This file is part of GNU Zebra.
        !             6:  *
        !             7:  * GNU Zebra is free software; you can redistribute it and/or modify it
        !             8:  * under the terms of the GNU General Public License as published by the
        !             9:  * Free Software Foundation; either version 2, or (at your option) any
        !            10:  * later version.
        !            11:  *
        !            12:  * GNU Zebra is distributed in the hope that it will be useful, but
        !            13:  * WITHOUT ANY WARRANTY; without even the implied warranty of
        !            14:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
        !            15:  * General Public License for more details.
        !            16:  *
        !            17:  * You should have received a copy of the GNU General Public License
        !            18:  * along with GNU Zebra; see the file COPYING.  If not, write to the Free
        !            19:  * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
        !            20:  * 02111-1307, USA.
        !            21:  */
        !            22: 
        !            23: #ifndef _ZEBRA_OSPF_PACKET_H
        !            24: #define _ZEBRA_OSPF_PACKET_H
        !            25: 
        !            26: #define OSPF_HEADER_SIZE         24U
        !            27: #define OSPF_AUTH_SIMPLE_SIZE     8U
        !            28: #define OSPF_AUTH_MD5_SIZE       16U
        !            29: 
        !            30: #define OSPF_MAX_PACKET_SIZE  65535U   /* includes IP Header size. */
        !            31: #define OSPF_HELLO_MIN_SIZE      20U   /* not including neighbors */
        !            32: #define OSPF_DB_DESC_MIN_SIZE     8U
        !            33: #define OSPF_LS_REQ_MIN_SIZE      0U
        !            34: #define OSPF_LS_UPD_MIN_SIZE      4U
        !            35: #define OSPF_LS_ACK_MIN_SIZE      0U
        !            36: 
        !            37: #define OSPF_MSG_HELLO         1  /* OSPF Hello Message. */
        !            38: #define OSPF_MSG_DB_DESC       2  /* OSPF Database Descriptoin Message. */
        !            39: #define OSPF_MSG_LS_REQ        3  /* OSPF Link State Request Message. */
        !            40: #define OSPF_MSG_LS_UPD        4  /* OSPF Link State Update Message. */
        !            41: #define OSPF_MSG_LS_ACK        5  /* OSPF Link State Acknoledgement Message. */
        !            42: 
        !            43: #define OSPF_SEND_PACKET_DIRECT         1
        !            44: #define OSPF_SEND_PACKET_INDIRECT       2
        !            45: #define OSPF_SEND_PACKET_LOOP           3
        !            46: 
        !            47: #define OSPF_HELLO_REPLY_DELAY          1
        !            48: 
        !            49: struct ospf_packet
        !            50: {
        !            51:   struct ospf_packet *next;
        !            52: 
        !            53:   /* Pointer to data stream. */
        !            54:   struct stream *s;
        !            55: 
        !            56:   /* IP destination address. */
        !            57:   struct in_addr dst;
        !            58: 
        !            59:   /* OSPF packet length. */
        !            60:   u_int16_t length;
        !            61: };
        !            62: 
        !            63: /* OSPF packet queue structure. */
        !            64: struct ospf_fifo
        !            65: {
        !            66:   unsigned long count;
        !            67: 
        !            68:   struct ospf_packet *head;
        !            69:   struct ospf_packet *tail;
        !            70: };
        !            71: 
        !            72: /* OSPF packet header structure. */
        !            73: struct ospf_header
        !            74: {
        !            75:   u_char version;                       /* OSPF Version. */
        !            76:   u_char type;                          /* Packet Type. */
        !            77:   u_int16_t length;                     /* Packet Length. */
        !            78:   struct in_addr router_id;             /* Router ID. */
        !            79:   struct in_addr area_id;               /* Area ID. */
        !            80:   u_int16_t checksum;                   /* Check Sum. */
        !            81:   u_int16_t auth_type;                  /* Authentication Type. */
        !            82:   /* Authentication Data. */
        !            83:   union
        !            84:   {
        !            85:     /* Simple Authentication. */
        !            86:     u_char auth_data [OSPF_AUTH_SIMPLE_SIZE];
        !            87:     /* Cryptographic Authentication. */
        !            88:     struct
        !            89:     {
        !            90:       u_int16_t zero;                   /* Should be 0. */
        !            91:       u_char key_id;                    /* Key ID. */
        !            92:       u_char auth_data_len;             /* Auth Data Length. */
        !            93:       u_int32_t crypt_seqnum;           /* Cryptographic Sequence Number. */
        !            94:     } crypt;
        !            95:   } u;
        !            96: };
        !            97: 
        !            98: /* OSPF Hello body format. */
        !            99: struct ospf_hello
        !           100: {
        !           101:   struct in_addr network_mask;
        !           102:   u_int16_t hello_interval;
        !           103:   u_char options;
        !           104:   u_char priority;
        !           105:   u_int32_t dead_interval;
        !           106:   struct in_addr d_router;
        !           107:   struct in_addr bd_router;
        !           108:   struct in_addr neighbors[1];
        !           109: };
        !           110: 
        !           111: /* OSPF Database Description body format. */
        !           112: struct ospf_db_desc
        !           113: {
        !           114:   u_int16_t mtu;
        !           115:   u_char options;
        !           116:   u_char flags;
        !           117:   u_int32_t dd_seqnum;
        !           118: };
        !           119: 
        !           120: 
        !           121: /* Macros. */
        !           122: /* XXX Perhaps obsolete; function in ospf_packet.c */
        !           123: #define OSPF_PACKET_MAX(oi)     ospf_packet_max (oi)
        !           124: 
        !           125: #define OSPF_OUTPUT_PNT(S)      ((S)->data + (S)->putp)
        !           126: #define OSPF_OUTPUT_LENGTH(S)   ((S)->endp)
        !           127: 
        !           128: #define IS_SET_DD_MS(X)         ((X) & OSPF_DD_FLAG_MS)
        !           129: #define IS_SET_DD_M(X)          ((X) & OSPF_DD_FLAG_M)
        !           130: #define IS_SET_DD_I(X)          ((X) & OSPF_DD_FLAG_I)
        !           131: #define IS_SET_DD_ALL(X)        ((X) & OSPF_DD_FLAG_ALL)
        !           132: 
        !           133: /* Prototypes. */
        !           134: extern void ospf_output_forward (struct stream *, int);
        !           135: extern struct ospf_packet *ospf_packet_new (size_t);
        !           136: extern void ospf_packet_free (struct ospf_packet *);
        !           137: extern struct ospf_fifo *ospf_fifo_new (void);
        !           138: extern void ospf_fifo_push (struct ospf_fifo *, struct ospf_packet *);
        !           139: extern struct ospf_packet *ospf_fifo_pop (struct ospf_fifo *);
        !           140: extern struct ospf_packet *ospf_fifo_head (struct ospf_fifo *);
        !           141: extern void ospf_fifo_flush (struct ospf_fifo *);
        !           142: extern void ospf_fifo_free (struct ospf_fifo *);
        !           143: extern void ospf_packet_add (struct ospf_interface *, struct ospf_packet *);
        !           144: extern void ospf_packet_delete (struct ospf_interface *);
        !           145: extern struct stream *ospf_stream_dup (struct stream *);
        !           146: extern struct ospf_packet *ospf_packet_dup (struct ospf_packet *);
        !           147: 
        !           148: extern int ospf_read (struct thread *);
        !           149: extern void ospf_hello_send (struct ospf_interface *);
        !           150: extern void ospf_db_desc_send (struct ospf_neighbor *);
        !           151: extern void ospf_db_desc_resend (struct ospf_neighbor *);
        !           152: extern void ospf_ls_req_send (struct ospf_neighbor *);
        !           153: extern void ospf_ls_upd_send_lsa (struct ospf_neighbor *, struct ospf_lsa *,
        !           154:                                  int);
        !           155: extern void ospf_ls_upd_send (struct ospf_neighbor *, struct list *, int);
        !           156: extern void ospf_ls_ack_send (struct ospf_neighbor *, struct ospf_lsa *);
        !           157: extern void ospf_ls_ack_send_delayed (struct ospf_interface *);
        !           158: extern void ospf_ls_retransmit (struct ospf_interface *, struct ospf_lsa *);
        !           159: extern void ospf_ls_req_event (struct ospf_neighbor *);
        !           160: 
        !           161: extern int ospf_ls_upd_timer (struct thread *);
        !           162: extern int ospf_ls_ack_timer (struct thread *);
        !           163: extern int ospf_poll_timer (struct thread *);
        !           164: extern int ospf_hello_reply_timer (struct thread *);
        !           165: 
        !           166: #endif /* _ZEBRA_OSPF_PACKET_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>