File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / quagga / ripngd / ripng_nexthop.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:26:11 2012 UTC (12 years, 4 months ago) by misho
Branches: quagga, MAIN
CVS tags: v0_99_22p0, v0_99_22, v0_99_21, v0_99_20_1, v0_99_20, HEAD
quagga

    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>