1/* 2 * Copyright (C) 2003 Yasuhiro Ohara 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 18 * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 19 * Boston, MA 02111-1307, USA. 20 */ 21 22#ifndef OSPF6D_H 23#define OSPF6D_H 24 25#define OSPF6_DAEMON_VERSION "0.9.7r" 26 27#include "libospf.h" 28#include "thread.h" 29 30/* global variables */ 31extern struct thread_master *master; 32 33/* Historical for KAME. */ 34#ifndef IPV6_JOIN_GROUP 35#ifdef IPV6_ADD_MEMBERSHIP 36#define IPV6_JOIN_GROUP IPV6_ADD_MEMBERSHIP 37#endif /* IPV6_ADD_MEMBERSHIP. */ 38#ifdef IPV6_JOIN_MEMBERSHIP 39#define IPV6_JOIN_GROUP IPV6_JOIN_MEMBERSHIP 40#endif /* IPV6_JOIN_MEMBERSHIP. */ 41#endif /* ! IPV6_JOIN_GROUP*/ 42 43#ifndef IPV6_LEAVE_GROUP 44#ifdef IPV6_DROP_MEMBERSHIP 45#define IPV6_LEAVE_GROUP IPV6_DROP_MEMBERSHIP 46#endif /* IPV6_DROP_MEMBERSHIP */ 47#endif /* ! IPV6_LEAVE_GROUP */ 48 49#define MSG_OK 0 50#define MSG_NG 1 51 52/* cast macro: XXX - these *must* die, ick ick. */ 53#define OSPF6_PROCESS(x) ((struct ospf6 *) (x)) 54#define OSPF6_AREA(x) ((struct ospf6_area *) (x)) 55#define OSPF6_INTERFACE(x) ((struct ospf6_interface *) (x)) 56#define OSPF6_NEIGHBOR(x) ((struct ospf6_neighbor *) (x)) 57 58/* operation on timeval structure */ 59#ifndef timerclear 60#define timerclear(a) (a)->tv_sec = (tvp)->tv_usec = 0 61#endif /*timerclear*/ 62#ifndef timersub 63#define timersub(a, b, res) \ 64 do { \ 65 (res)->tv_sec = (a)->tv_sec - (b)->tv_sec; \ 66 (res)->tv_usec = (a)->tv_usec - (b)->tv_usec; \ 67 if ((res)->tv_usec < 0) \ 68 { \ 69 (res)->tv_sec--; \ 70 (res)->tv_usec += 1000000; \ 71 } \ 72 } while (0) 73#endif /*timersub*/ 74#define timerstring(tv, buf, size) \ 75 do { \ 76 if ((tv)->tv_sec / 60 / 60 / 24) \ 77 snprintf (buf, size, "%ldd%02ld:%02ld:%02ld", \ 78 (tv)->tv_sec / 60 / 60 / 24, \ 79 (tv)->tv_sec / 60 / 60 % 24, \ 80 (tv)->tv_sec / 60 % 60, \ 81 (tv)->tv_sec % 60); \ 82 else \ 83 snprintf (buf, size, "%02ld:%02ld:%02ld", \ 84 (tv)->tv_sec / 60 / 60 % 24, \ 85 (tv)->tv_sec / 60 % 60, \ 86 (tv)->tv_sec % 60); \ 87 } while (0) 88#define timerstring_local(tv, buf, size) \ 89 do { \ 90 int ret; \ 91 struct tm *tm; \ 92 tm = localtime (&(tv)->tv_sec); \ 93 ret = strftime (buf, size, "%Y/%m/%d %H:%M:%S", tm); \ 94 if (ret == 0) \ 95 zlog_warn ("strftime error"); \ 96 } while (0) 97 98#define threadtimer_string(now, t, buf, size) \ 99 do { \ 100 struct timeval result; \ 101 if (!t) \ 102 snprintf(buf, size, "inactive"); \ 103 else { \ 104 timersub(&t->u.sands, &now, &result); \ 105 timerstring(&result, buf, size); \ 106 } \ 107} while (0) 108 109/* for commands */ 110#define OSPF6_AREA_STR "Area information\n" 111#define OSPF6_AREA_ID_STR "Area ID (as an IPv4 notation)\n" 112#define OSPF6_SPF_STR "Shortest Path First tree information\n" 113#define OSPF6_ROUTER_ID_STR "Specify Router-ID\n" 114#define OSPF6_LS_ID_STR "Specify Link State ID\n" 115 116#define VNL VTY_NEWLINE 117#define OSPF6_CMD_CHECK_RUNNING() \ 118 if (ospf6 == NULL) \ 119 { \ 120 vty_out (vty, "OSPFv3 is not running%s", VTY_NEWLINE); \ 121 return CMD_SUCCESS; \ 122 } 123 124 125/* Function Prototypes */ 126extern struct route_node *route_prev (struct route_node *node); 127 128extern void ospf6_debug (void); 129extern void ospf6_init (void); 130 131#endif /* OSPF6D_H */ 132 133 134