Annotation of embedaddon/quagga/ripngd/ripng_nexthop.h, revision 1.1
1.1 ! misho 1: /* RIPng nexthop support
! 2: * Copyright (C) 6WIND Vincent Jardin <vincent.jardin@6wind.com>
! 3: *
! 4: * This file is part of GNU Zebra.
! 5: *
! 6: * GNU Zebra is free software; you can redistribute it and/or modify it
! 7: * under the terms of the GNU General Public License as published by the
! 8: * Free Software Foundation; either version 2, or (at your option) any
! 9: * 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
! 17: * along with GNU Zebra; see the file COPYING. If not, write to the Free
! 18: * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! 19: * 02111-1307, USA.
! 20: */
! 21:
! 22: #ifndef _ZEBRA_RIPNG_RIPNG_NEXTHOP_H
! 23: #define _ZEBRA_RIPNG_RIPNG_NEXTHOP_H
! 24:
! 25: #include <zebra.h>
! 26: #include "linklist.h"
! 27: #include "ripngd/ripng_route.h"
! 28: #include "ripngd/ripngd.h"
! 29:
! 30: extern struct list * ripng_rte_new(void);
! 31: extern void ripng_rte_free(struct list *ripng_rte_list);
! 32: extern void ripng_rte_add(struct list *ripng_rte_list, struct prefix_ipv6 *p,
! 33: struct ripng_info *rinfo,
! 34: struct ripng_aggregate *aggregate);
! 35: extern void ripng_rte_send(struct list *ripng_rte_list, struct interface *ifp,
! 36: struct sockaddr_in6 *to);
! 37:
! 38: /***
! 39: * 1 if A > B
! 40: * 0 if A = B
! 41: * -1 if A < B
! 42: **/
! 43: static inline int
! 44: addr6_cmp(struct in6_addr *A, struct in6_addr *B) {
! 45:
! 46: #ifndef s6_addr32
! 47: #if defined(SUNOS_5)
! 48: /* Some SunOS define s6_addr32 only to kernel */
! 49: #define s6_addr32 _S6_un._S6_u32
! 50: #else
! 51: #define s6_addr32 __u6_addr.__u6_addr32
! 52: #endif /* SUNOS_5 */
! 53: #endif /*s6_addr32*/
! 54:
! 55: #define a(i) A->s6_addr32[i]
! 56: #define b(i) B->s6_addr32[i]
! 57:
! 58: if (a(3) > b(3))
! 59: return 1;
! 60: else if ((a(3) == b(3)) && (a(2) > b(2)))
! 61: return 1;
! 62: else if ((a(3) == b(3)) && (a(2) == b(2)) && (a(1) > b(1)))
! 63: return 1;
! 64: else if ((a(3) == b(3)) && (a(2) == b(2)) && (a(1) == b(1)) && (a(0) > b(0)))
! 65: return 1;
! 66:
! 67: if ((a(3) == b(3)) && (a(2) == b(2)) && (a(1) == b(1)) && (a(0) == b(0)))
! 68: return 0;
! 69:
! 70: return -1;
! 71: }
! 72:
! 73: #endif /* _ZEBRA_RIPNG_RIPNG_NEXTHOP_H */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>