#include "ospf6_top.h"
-struct ospf6_area
-{
- /* Reference to Top data structure */
- struct ospf6 *ospf6;
+struct ospf6_area {
+ /* Reference to Top data structure */
+ struct ospf6 *ospf6;
- /* Area-ID */
- u_int32_t area_id;
+ /* Area-ID */
+ uint32_t area_id;
- /* Area-ID string */
- char name[16];
+#define OSPF6_AREA_FMT_DOTTEDQUAD 1
+#define OSPF6_AREA_FMT_DECIMAL 2
+ /* Area-ID string */
+ char name[16];
- /* flag */
- u_char flag;
+ /* flag */
+ uint8_t flag;
- /* OSPF Option */
- u_char options[3];
+ /* OSPF Option */
+ uint8_t options[3];
- /* Summary routes to be originated (includes Configured Address Ranges) */
- struct ospf6_route_table *range_table;
- struct ospf6_route_table *summary_prefix;
- struct ospf6_route_table *summary_router;
+ /* Summary routes to be originated (includes Configured Address Ranges)
+ */
+ struct ospf6_route_table *range_table;
+ struct ospf6_route_table *summary_prefix;
+ struct ospf6_route_table *summary_router;
- /* Area type */
- int no_summary;
+ /* Area type */
+ int no_summary;
- /* OSPF interface list */
- struct list *if_list;
+ /* Brouter traversal protection */
+ int intra_brouter_calc;
- struct ospf6_lsdb *lsdb;
- struct ospf6_lsdb *lsdb_self;
+ /* OSPF interface list */
+ struct list *if_list;
- struct ospf6_route_table *spf_table;
- struct ospf6_route_table *route_table;
+ struct ospf6_lsdb *lsdb;
+ struct ospf6_lsdb *lsdb_self;
+ struct ospf6_lsdb *temp_router_lsa_lsdb;
- u_int32_t spf_calculation; /* SPF calculation count */
+ struct ospf6_route_table *spf_table;
+ struct ospf6_route_table *route_table;
- struct thread *thread_router_lsa;
- struct thread *thread_intra_prefix_lsa;
- u_int32_t router_lsa_size_limit;
+ uint32_t spf_calculation; /* SPF calculation count */
- /* Area announce list */
- struct
- {
- char *name;
- struct access_list *list;
- } _export;
+ struct thread *thread_router_lsa;
+ struct thread *thread_intra_prefix_lsa;
+ uint32_t router_lsa_size_limit;
+
+ /* Area announce list */
+ struct {
+ char *name;
+ struct access_list *list;
+ } _export;
#define EXPORT_NAME(A) (A)->_export.name
#define EXPORT_LIST(A) (A)->_export.list
- /* Area acceptance list */
- struct
- {
- char *name;
- struct access_list *list;
- } import;
+ /* Area acceptance list */
+ struct {
+ char *name;
+ struct access_list *list;
+ } import;
#define IMPORT_NAME(A) (A)->import.name
#define IMPORT_LIST(A) (A)->import.list
- /* Type 3 LSA Area prefix-list */
- struct
- {
- char *name;
- struct prefix_list *list;
- } plist_in;
+ /* Type 3 LSA Area prefix-list */
+ struct {
+ char *name;
+ struct prefix_list *list;
+ } plist_in;
#define PREFIX_NAME_IN(A) (A)->plist_in.name
#define PREFIX_LIST_IN(A) (A)->plist_in.list
- struct
- {
- char *name;
- struct prefix_list *list;
- } plist_out;
+ struct {
+ char *name;
+ struct prefix_list *list;
+ } plist_out;
#define PREFIX_NAME_OUT(A) (A)->plist_out.name
#define PREFIX_LIST_OUT(A) (A)->plist_out.list
- /* Time stamps. */
- struct timeval ts_spf; /* SPF calculation time stamp. */
+ /* Time stamps. */
+ struct timeval ts_spf; /* SPF calculation time stamp. */
+
+ uint32_t full_nbrs; /* Fully adjacent neighbors. */
+ uint8_t intra_prefix_originate; /* Force intra_prefix lsa originate */
};
#define OSPF6_AREA_ENABLE 0x01
#define IS_AREA_STUB(oa) (CHECK_FLAG ((oa)->flag, OSPF6_AREA_STUB))
/* prototypes */
-extern int ospf6_area_cmp (void *va, void *vb);
+extern int ospf6_area_cmp(void *va, void *vb);
-extern struct ospf6_area *ospf6_area_create (u_int32_t, struct ospf6 *);
-extern void ospf6_area_delete (struct ospf6_area *);
-extern struct ospf6_area *ospf6_area_lookup (u_int32_t, struct ospf6 *);
+extern struct ospf6_area *ospf6_area_create(uint32_t, struct ospf6 *, int);
+extern void ospf6_area_delete(struct ospf6_area *);
+extern struct ospf6_area *ospf6_area_lookup(uint32_t, struct ospf6 *);
-extern void ospf6_area_enable (struct ospf6_area *);
-extern void ospf6_area_disable (struct ospf6_area *);
+extern void ospf6_area_enable(struct ospf6_area *);
+extern void ospf6_area_disable(struct ospf6_area *);
-extern void ospf6_area_show (struct vty *, struct ospf6_area *);
+extern void ospf6_area_show(struct vty *, struct ospf6_area *);
-extern void ospf6_area_config_write (struct vty *vty);
-extern void ospf6_area_init (void);
+extern void ospf6_area_plist_update(struct prefix_list *plist, int add);
+extern void ospf6_area_config_write(struct vty *vty);
+extern void ospf6_area_init(void);
#endif /* OSPF_AREA_H */