Line data Source code
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 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_RIPNG_RIPNG_NEXTHOP_H
22 : #define _ZEBRA_RIPNG_RIPNG_NEXTHOP_H
23 :
24 : #include <zebra.h>
25 : #include "linklist.h"
26 : #include "ripngd/ripng_route.h"
27 : #include "ripngd/ripngd.h"
28 :
29 : extern struct list *ripng_rte_new(void);
30 : extern void ripng_rte_free(struct list *ripng_rte_list);
31 : extern void ripng_rte_add(struct list *ripng_rte_list, struct prefix_ipv6 *p,
32 : struct ripng_info *rinfo,
33 : struct ripng_aggregate *aggregate);
34 : extern void ripng_rte_send(struct list *ripng_rte_list, struct interface *ifp,
35 : struct sockaddr_in6 *to);
36 :
37 : /***
38 : * 1 if A > B
39 : * 0 if A = B
40 : * -1 if A < B
41 : **/
42 0 : static inline int addr6_cmp(struct in6_addr *A, struct in6_addr *B)
43 : {
44 : #define a(i) A->s6_addr32[i]
45 : #define b(i) B->s6_addr32[i]
46 :
47 0 : if (a(3) > b(3))
48 : return 1;
49 0 : else if ((a(3) == b(3)) && (a(2) > b(2)))
50 : return 1;
51 0 : else if ((a(3) == b(3)) && (a(2) == b(2)) && (a(1) > b(1)))
52 : return 1;
53 0 : else if ((a(3) == b(3)) && (a(2) == b(2)) && (a(1) == b(1))
54 0 : && (a(0) > b(0)))
55 : return 1;
56 :
57 0 : if ((a(3) == b(3)) && (a(2) == b(2)) && (a(1) == b(1))
58 0 : && (a(0) == b(0)))
59 0 : return 0;
60 :
61 : return -1;
62 : }
63 :
64 : #endif /* _ZEBRA_RIPNG_RIPNG_NEXTHOP_H */
|