1 /* Distribute list functions header 2 * Copyright (C) 1999 Kunihiro Ishiguro 3 * 4 * This file is part of GNU Zebra. 5 * 6 * GNU Zebra is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published 8 * by the Free Software Foundation; either version 2, or (at your 9 * option) any later version. 10 * 11 * GNU Zebra is distributed in the hope that it will be useful, but 12 * WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License along 17 * with this program; see the file COPYING; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 21 #ifndef _ZEBRA_DISTRIBUTE_H 22 #define _ZEBRA_DISTRIBUTE_H 23 24 #include <zebra.h> 25 #include "if.h" 26 #include "filter.h" 27 28 #ifdef __cplusplus 29 extern "C" { 30 #endif 31 32 /* Disctirubte list types. */ 33 enum distribute_type { 34 DISTRIBUTE_V4_IN, 35 DISTRIBUTE_V6_IN, 36 DISTRIBUTE_V4_OUT, 37 DISTRIBUTE_V6_OUT, 38 DISTRIBUTE_MAX 39 }; 40 41 struct distribute { 42 /* Name of the interface. */ 43 char *ifname; 44 45 /* Filter name of `in' and `out' */ 46 char *list[DISTRIBUTE_MAX]; 47 48 /* prefix-list name of `in' and `out' */ 49 char *prefix[DISTRIBUTE_MAX]; 50 }; 51 52 struct distribute_ctx { 53 /* Hash of distribute list. */ 54 struct hash *disthash; 55 56 /* Hook functions. */ 57 void (*distribute_add_hook)(struct distribute_ctx *ctx, 58 struct distribute *dist); 59 void (*distribute_delete_hook)(struct distribute_ctx *ctx, 60 struct distribute *dist); 61 62 /* vrf information */ 63 struct vrf *vrf; 64 }; 65 66 /* Prototypes for distribute-list. */ 67 extern void distribute_list_init(int node); 68 extern struct distribute_ctx *distribute_list_ctx_create(struct vrf *vrf); 69 extern void distribute_list_delete(struct distribute_ctx **ctx); 70 extern void distribute_list_add_hook(struct distribute_ctx *ctx, 71 void (*)(struct distribute_ctx *ctx, 72 struct distribute *)); 73 extern void distribute_list_delete_hook(struct distribute_ctx *ctx, 74 void (*)(struct distribute_ctx *ctx, 75 struct distribute *)); 76 extern struct distribute *distribute_lookup(struct distribute_ctx *ctx, 77 const char *ifname); 78 extern int config_write_distribute(struct vty *vty, 79 struct distribute_ctx *ctx); 80 extern int config_show_distribute(struct vty *vty, 81 struct distribute_ctx *ctx); 82 83 extern enum filter_type distribute_apply_in(struct interface *, 84 struct prefix *); 85 extern enum filter_type distribute_apply_out(struct interface *, 86 struct prefix *); 87 88 #ifdef __cplusplus 89 } 90 #endif 91 92 #endif /* _ZEBRA_DISTRIBUTE_H */ 93