]> git.proxmox.com Git - mirror_frr.git/blame - isisd/isis_flags.c
zebra, lib: fix the ZEBRA_INTERFACE_VRF_UPDATE zapi message
[mirror_frr.git] / isisd / isis_flags.c
CommitLineData
eb5d44eb 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
d62a17ae 6 * Tampere University of Technology
eb5d44eb 7 * Institute of Communications Engineering
8 *
d62a17ae 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)
eb5d44eb 12 * any later version.
13 *
d62a17ae 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
eb5d44eb 17 * more details.
18 *
896014f4
DL
19 * You should have received a copy of the GNU General Public License along
20 * with this program; see the file COPYING; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
eb5d44eb 22 */
23
eb5d44eb 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
d62a17ae 32void flags_initialize(struct flags *flags)
c7350c48 33{
d62a17ae 34 flags->maxindex = 0;
35 flags->free_idcs = NULL;
c7350c48
PJ
36}
37
d62a17ae 38long int flags_get_index(struct flags *flags)
eb5d44eb 39{
d62a17ae 40 struct listnode *node;
41 long int index;
eb5d44eb 42
d62a17ae 43 if (flags->free_idcs == NULL || flags->free_idcs->count == 0) {
44 index = flags->maxindex++;
45 } else {
46 node = listhead(flags->free_idcs);
47 index = (long int)listgetdata(node);
48 listnode_delete(flags->free_idcs, (void *)index);
49 index--;
50 }
f390d2c7 51
d62a17ae 52 return index;
eb5d44eb 53}
54
d62a17ae 55void flags_free_index(struct flags *flags, long int index)
eb5d44eb 56{
d62a17ae 57 if (index + 1 == flags->maxindex) {
58 flags->maxindex--;
59 return;
60 }
c7350c48 61
d62a17ae 62 if (flags->free_idcs == NULL) {
63 flags->free_idcs = list_new();
64 }
f390d2c7 65
d62a17ae 66 listnode_add(flags->free_idcs, (void *)(index + 1));
f390d2c7 67
d62a17ae 68 return;
eb5d44eb 69}
70
d7c0a89a 71int flags_any_set(uint32_t *flags)
eb5d44eb 72{
d7c0a89a 73 uint32_t zero[ISIS_MAX_CIRCUITS];
d62a17ae 74 memset(zero, 0x00, ISIS_MAX_CIRCUITS * 4);
eb5d44eb 75
d62a17ae 76 return bcmp(flags, zero, ISIS_MAX_CIRCUITS * 4);
eb5d44eb 77}