Annotation of embedaddon/quagga/isisd/isis_flags.c, revision 1.1
1.1 ! misho 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: int
! 40: flags_get_index (struct flags *flags)
! 41: {
! 42: struct listnode *node;
! 43: 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 = (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, 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>