Annotation of embedaddon/quagga/lib/table.h, revision 1.1
1.1 ! misho 1: /*
! 2: * Routing Table
! 3: * Copyright (C) 1998 Kunihiro Ishiguro
! 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_TABLE_H
! 24: #define _ZEBRA_TABLE_H
! 25:
! 26: /* Routing table top structure. */
! 27: struct route_table
! 28: {
! 29: struct route_node *top;
! 30: };
! 31:
! 32: /* Each routing entry. */
! 33: struct route_node
! 34: {
! 35: /* Actual prefix of this radix. */
! 36: struct prefix p;
! 37:
! 38: /* Tree link. */
! 39: struct route_table *table;
! 40: struct route_node *parent;
! 41: struct route_node *link[2];
! 42: #define l_left link[0]
! 43: #define l_right link[1]
! 44:
! 45: /* Lock of this radix */
! 46: unsigned int lock;
! 47:
! 48: /* Each node of route. */
! 49: void *info;
! 50:
! 51: /* Aggregation. */
! 52: void *aggregate;
! 53: };
! 54:
! 55: /* Prototypes. */
! 56: extern struct route_table *route_table_init (void);
! 57: extern void route_table_finish (struct route_table *);
! 58: extern void route_unlock_node (struct route_node *node);
! 59: extern void route_node_delete (struct route_node *node);
! 60: extern struct route_node *route_top (struct route_table *);
! 61: extern struct route_node *route_next (struct route_node *);
! 62: extern struct route_node *route_next_until (struct route_node *,
! 63: struct route_node *);
! 64: extern struct route_node *route_node_get (struct route_table *,
! 65: struct prefix *);
! 66: extern struct route_node *route_node_lookup (struct route_table *,
! 67: struct prefix *);
! 68: extern struct route_node *route_lock_node (struct route_node *node);
! 69: extern struct route_node *route_node_match (const struct route_table *,
! 70: const struct prefix *);
! 71: extern struct route_node *route_node_match_ipv4 (const struct route_table *,
! 72: const struct in_addr *);
! 73: #ifdef HAVE_IPV6
! 74: extern struct route_node *route_node_match_ipv6 (const struct route_table *,
! 75: const struct in6_addr *);
! 76: #endif /* HAVE_IPV6 */
! 77:
! 78: #endif /* _ZEBRA_TABLE_H */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>