]> git.proxmox.com Git - mirror_frr.git/blobdiff - lib/distribute.h
lib: Fix missing __be16 typedef on CentOS6
[mirror_frr.git] / lib / distribute.h
index 35c5e0d6b6e20594dd7d6bd4686d6767ed700f6c..4016d3b1331642119852bbb7531b61505b7cb155 100644 (file)
 #include "if.h"
 #include "filter.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* Disctirubte list types. */
 enum distribute_type {
        DISTRIBUTE_V4_IN,
@@ -45,18 +49,44 @@ struct distribute {
        char *prefix[DISTRIBUTE_MAX];
 };
 
+struct distribute_ctx {
+       /* Hash of distribute list. */
+       struct hash *disthash;
+
+       /* Hook functions. */
+       void (*distribute_add_hook)(struct distribute_ctx *ctx,
+                                   struct distribute *dist);
+       void (*distribute_delete_hook)(struct distribute_ctx *ctx,
+                                      struct distribute *dist);
+
+       /* vrf information */
+       struct vrf *vrf;
+};
+
 /* Prototypes for distribute-list. */
-extern void distribute_list_init(int);
-extern void distribute_list_reset(void);
-extern void distribute_list_add_hook(void (*)(struct distribute *));
-extern void distribute_list_delete_hook(void (*)(struct distribute *));
-extern struct distribute *distribute_lookup(const char *);
-extern int config_write_distribute(struct vty *);
-extern int config_show_distribute(struct vty *);
+extern void distribute_list_init(int node);
+extern struct distribute_ctx *distribute_list_ctx_create(struct vrf *vrf);
+extern void distribute_list_delete(struct distribute_ctx **ctx);
+extern void distribute_list_add_hook(struct distribute_ctx *ctx,
+                                    void (*)(struct distribute_ctx *ctx,
+                                             struct distribute *));
+extern void distribute_list_delete_hook(struct distribute_ctx *ctx,
+                                       void (*)(struct distribute_ctx *ctx,
+                                                struct distribute *));
+extern struct distribute *distribute_lookup(struct distribute_ctx *ctx,
+                                           const char *ifname);
+extern int config_write_distribute(struct vty *vty,
+                                  struct distribute_ctx *ctx);
+extern int config_show_distribute(struct vty *vty,
+                                 struct distribute_ctx *ctx);
 
 extern enum filter_type distribute_apply_in(struct interface *,
                                            struct prefix *);
 extern enum filter_type distribute_apply_out(struct interface *,
                                             struct prefix *);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* _ZEBRA_DISTRIBUTE_H */