1: /*
2: * IS-IS Rout(e)ing protocol - isis_flags.c
3: * Routines for manipulation of SSN and SRM flags
4: *
5: * Copyright (C) 2001,2002 Sampo Saaristo
6: * Tampere University of Technology
7: * Institute of Communications Engineering
8: *
9: * This program is free software; you can redistribute it and/or modify it
10: * under the terms of the GNU General Public Licenseas published by the Free
11: * Software Foundation; either version 2 of the License, or (at your option)
12: * any later version.
13: *
14: * This program is distributed in the hope that it will be useful,but WITHOUT
15: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
16: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
17: * more details.
18: *
19: * You should have received a copy of the GNU General Public License along
20: * with this program; if not, write to the Free Software Foundation, Inc.,
21: * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22: */
23:
24: #include <zebra.h>
25: #include "log.h"
26: #include "linklist.h"
27:
28: #include "isisd/isis_constants.h"
29: #include "isisd/isis_common.h"
30: #include "isisd/isis_flags.h"
31:
32: void
33: flags_initialize (struct flags *flags)
34: {
35: flags->maxindex = 0;
36: flags->free_idcs = NULL;
37: }
38:
39: long int
40: flags_get_index (struct flags *flags)
41: {
42: struct listnode *node;
43: long int index;
44:
45: if (flags->free_idcs == NULL || flags->free_idcs->count == 0)
46: {
47: index = flags->maxindex++;
48: }
49: else
50: {
51: node = listhead (flags->free_idcs);
52: index = (long int) listgetdata (node);
53: listnode_delete (flags->free_idcs, (void *) index);
54: index--;
55: }
56:
57: return index;
58: }
59:
60: void
61: flags_free_index (struct flags *flags, long int index)
62: {
63: if (index + 1 == flags->maxindex)
64: {
65: flags->maxindex--;
66: return;
67: }
68:
69: if (flags->free_idcs == NULL)
70: {
71: flags->free_idcs = list_new ();
72: }
73:
74: listnode_add (flags->free_idcs, (void *) (index + 1));
75:
76: return;
77: }
78:
79: int
80: flags_any_set (u_int32_t * flags)
81: {
82: u_int32_t zero[ISIS_MAX_CIRCUITS];
83: memset (zero, 0x00, ISIS_MAX_CIRCUITS * 4);
84:
85: return bcmp (flags, zero, ISIS_MAX_CIRCUITS * 4);
86: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>