Annotation of embedaddon/quagga/pimd/pim_iface.h, revision 1.1

1.1     ! misho       1: /*
        !             2:   PIM for Quagga
        !             3:   Copyright (C) 2008  Everton da Silva Marques
        !             4: 
        !             5:   This program is free software; you can redistribute it and/or modify
        !             6:   it under the terms of the GNU General Public License as published by
        !             7:   the Free Software Foundation; either version 2 of the License, or
        !             8:   (at your option) any later version.
        !             9: 
        !            10:   This program is distributed in the hope that it will be useful, but
        !            11:   WITHOUT ANY WARRANTY; without even the implied warranty of
        !            12:   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
        !            13:   General Public License for more details.
        !            14:   
        !            15:   You should have received a copy of the GNU General Public License
        !            16:   along with this program; see the file COPYING; if not, write to the
        !            17:   Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
        !            18:   MA 02110-1301 USA
        !            19:   
        !            20:   $QuaggaId: $Format:%an, %ai, %h$ $
        !            21: */
        !            22: 
        !            23: #ifndef PIM_IFACE_H
        !            24: #define PIM_IFACE_H
        !            25: 
        !            26: #include <zebra.h>
        !            27: 
        !            28: #include "if.h"
        !            29: #include "vty.h"
        !            30: 
        !            31: #include "pim_igmp.h"
        !            32: #include "pim_upstream.h"
        !            33: 
        !            34: #define PIM_IF_MASK_PIM                             (1 << 0)
        !            35: #define PIM_IF_MASK_IGMP                            (1 << 1)
        !            36: #define PIM_IF_MASK_IGMP_LISTEN_ALLROUTERS          (1 << 2)
        !            37: #define PIM_IF_MASK_PIM_CAN_DISABLE_JOIN_SUPRESSION (1 << 3)
        !            38: 
        !            39: #define PIM_IF_IS_DELETED(ifp) ((ifp)->ifindex == IFINDEX_INTERNAL)
        !            40: 
        !            41: #define PIM_IF_TEST_PIM(options) (PIM_IF_MASK_PIM & (options))
        !            42: #define PIM_IF_TEST_IGMP(options) (PIM_IF_MASK_IGMP & (options))
        !            43: #define PIM_IF_TEST_IGMP_LISTEN_ALLROUTERS(options) (PIM_IF_MASK_IGMP_LISTEN_ALLROUTERS & (options))
        !            44: #define PIM_IF_TEST_PIM_CAN_DISABLE_JOIN_SUPRESSION(options) (PIM_IF_MASK_PIM_CAN_DISABLE_JOIN_SUPRESSION & (options))
        !            45: 
        !            46: #define PIM_IF_DO_PIM(options) ((options) |= PIM_IF_MASK_PIM)
        !            47: #define PIM_IF_DO_IGMP(options) ((options) |= PIM_IF_MASK_IGMP)
        !            48: #define PIM_IF_DO_IGMP_LISTEN_ALLROUTERS(options) ((options) |= PIM_IF_MASK_IGMP_LISTEN_ALLROUTERS)
        !            49: #define PIM_IF_DO_PIM_CAN_DISABLE_JOIN_SUPRESSION(options) ((options) |= PIM_IF_MASK_PIM_CAN_DISABLE_JOIN_SUPRESSION)
        !            50: 
        !            51: #define PIM_IF_DONT_PIM(options) ((options) &= ~PIM_IF_MASK_PIM)
        !            52: #define PIM_IF_DONT_IGMP(options) ((options) &= ~PIM_IF_MASK_IGMP)
        !            53: #define PIM_IF_DONT_IGMP_LISTEN_ALLROUTERS(options) ((options) &= ~PIM_IF_MASK_IGMP_LISTEN_ALLROUTERS)
        !            54: #define PIM_IF_DONT_PIM_CAN_DISABLE_JOIN_SUPRESSION(options) ((options) &= ~PIM_IF_MASK_PIM_CAN_DISABLE_JOIN_SUPRESSION)
        !            55: 
        !            56: struct pim_interface {
        !            57:   uint32_t       options;                            /* bit vector */
        !            58:   int            mroute_vif_index;
        !            59:   struct in_addr primary_address; /* remember addr to detect change */
        !            60: 
        !            61:   int          igmp_default_robustness_variable;            /* IGMPv3 QRV */
        !            62:   int          igmp_default_query_interval;                 /* IGMPv3 secs between general queries */
        !            63:   int          igmp_query_max_response_time_dsec;           /* IGMPv3 Max Response Time in dsecs for general queries */
        !            64:   int          igmp_specific_query_max_response_time_dsec;  /* IGMPv3 Max Response Time in dsecs for specific queries */
        !            65:   struct list *igmp_socket_list;                            /* list of struct igmp_sock */
        !            66:   struct list *igmp_join_list;                              /* list of struct igmp_join */
        !            67: 
        !            68:   int            pim_sock_fd;       /* PIM socket file descriptor */
        !            69:   struct thread *t_pim_sock_read;   /* thread for reading PIM socket */
        !            70:   int64_t        pim_sock_creation; /* timestamp of PIM socket creation */
        !            71: 
        !            72:   struct thread *t_pim_hello_timer;
        !            73:   int            pim_hello_period;
        !            74:   int            pim_default_holdtime;
        !            75:   int            pim_triggered_hello_delay;
        !            76:   uint32_t       pim_generation_id;
        !            77:   uint16_t       pim_propagation_delay_msec; /* config */
        !            78:   uint16_t       pim_override_interval_msec; /* config */
        !            79:   struct list   *pim_neighbor_list; /* list of struct pim_neighbor */
        !            80:   struct list   *pim_ifchannel_list; /* list of struct pim_ifchannel */
        !            81: 
        !            82:   /* neighbors without lan_delay */
        !            83:   int            pim_number_of_nonlandelay_neighbors;
        !            84:   uint16_t       pim_neighbors_highest_propagation_delay_msec;
        !            85:   uint16_t       pim_neighbors_highest_override_interval_msec;
        !            86: 
        !            87:   /* DR Election */
        !            88:   int64_t        pim_dr_election_last; /* timestamp */
        !            89:   int            pim_dr_election_count;
        !            90:   int            pim_dr_election_changes;
        !            91:   struct in_addr pim_dr_addr;
        !            92:   uint32_t       pim_dr_priority;            /* config */
        !            93:   int            pim_dr_num_nondrpri_neighbors; /* neighbors without dr_pri */
        !            94: 
        !            95:   int64_t        pim_ifstat_start; /* start timestamp for stats */
        !            96:   uint32_t       pim_ifstat_hello_sent;
        !            97:   uint32_t       pim_ifstat_hello_sendfail;
        !            98:   uint32_t       pim_ifstat_hello_recv;
        !            99:   uint32_t       pim_ifstat_hello_recvfail;
        !           100: };
        !           101: 
        !           102: /*
        !           103:   if default_holdtime is set (>= 0), use it;
        !           104:   otherwise default_holdtime is 3.5 * hello_period
        !           105:  */
        !           106: #define PIM_IF_DEFAULT_HOLDTIME(pim_ifp) \
        !           107:   (((pim_ifp)->pim_default_holdtime < 0) ? \
        !           108:   ((pim_ifp)->pim_hello_period * 7 / 2) : \
        !           109:   ((pim_ifp)->pim_default_holdtime))
        !           110: 
        !           111: struct pim_interface *pim_if_new(struct interface *ifp, int igmp, int pim);
        !           112: void                  pim_if_delete(struct interface *ifp);
        !           113: void pim_if_addr_add(struct connected *ifc);
        !           114: void pim_if_addr_del(struct connected *ifc, int force_prim_as_any);
        !           115: void pim_if_addr_add_all(struct interface *ifp);
        !           116: void pim_if_addr_del_all(struct interface *ifp);
        !           117: void pim_if_addr_del_all_igmp(struct interface *ifp);
        !           118: void pim_if_addr_del_all_pim(struct interface *ifp);
        !           119: 
        !           120: int pim_if_add_vif(struct interface *ifp);
        !           121: int pim_if_del_vif(struct interface *ifp);
        !           122: void pim_if_add_vif_all(void);
        !           123: void pim_if_del_vif_all(void);
        !           124: 
        !           125: struct interface *pim_if_find_by_vif_index(ifindex_t vif_index);
        !           126: int pim_if_find_vifindex_by_ifindex(ifindex_t ifindex);
        !           127: 
        !           128: int pim_if_lan_delay_enabled(struct interface *ifp);
        !           129: uint16_t pim_if_effective_propagation_delay_msec(struct interface *ifp);
        !           130: uint16_t pim_if_effective_override_interval_msec(struct interface *ifp);
        !           131: uint16_t pim_if_jp_override_interval_msec(struct interface *ifp);
        !           132: struct pim_neighbor *pim_if_find_neighbor(struct interface *ifp,
        !           133:                                          struct in_addr addr);
        !           134: 
        !           135: long pim_if_t_suppressed_msec(struct interface *ifp);
        !           136: int pim_if_t_override_msec(struct interface *ifp);
        !           137: 
        !           138: struct in_addr pim_find_primary_addr(struct interface *ifp);
        !           139: 
        !           140: int pim_if_igmp_join_add(struct interface *ifp,
        !           141:                         struct in_addr group_addr,
        !           142:                         struct in_addr source_addr);
        !           143: int pim_if_igmp_join_del(struct interface *ifp,
        !           144:                         struct in_addr group_addr,
        !           145:                         struct in_addr source_addr);
        !           146: 
        !           147: void pim_if_update_could_assert(struct interface *ifp);
        !           148: 
        !           149: void pim_if_assert_on_neighbor_down(struct interface *ifp,
        !           150:                                    struct in_addr neigh_addr);
        !           151: 
        !           152: void pim_if_rpf_interface_changed(struct interface *old_rpf_ifp,
        !           153:                                  struct pim_upstream *up);
        !           154: 
        !           155: void pim_if_update_join_desired(struct pim_interface *pim_ifp);
        !           156: 
        !           157: void pim_if_update_assert_tracking_desired(struct interface *ifp);
        !           158: 
        !           159: #endif /* PIM_IFACE_H */

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