isis_flags.c 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. #include <zebra.h>
  24. #include "log.h"
  25. #include "linklist.h"
  26. #include "isisd/isis_constants.h"
  27. #include "isisd/isis_common.h"
  28. #include "isisd/isis_flags.h"
  29. int
  30. flags_get_index (struct flags *flags)
  31. {
  32. struct listnode *node;
  33. int index;
  34. if (flags->free_idcs == NULL || flags->free_idcs->count == 0)
  35. {
  36. flags->maxindex++;
  37. index = flags->maxindex;
  38. }
  39. else
  40. {
  41. node = listhead (flags->free_idcs);
  42. index = (int) getdata (node);
  43. listnode_delete (flags->free_idcs, (void *) index);
  44. }
  45. return index;
  46. }
  47. void
  48. flags_free_index (struct flags *flags, int index)
  49. {
  50. if (flags->free_idcs == NULL)
  51. {
  52. flags->free_idcs = list_new ();
  53. }
  54. listnode_add (flags->free_idcs, (void *) index);
  55. return;
  56. }
  57. int
  58. flags_any_set (u_int32_t * flags)
  59. {
  60. u_int32_t zero[ISIS_MAX_CIRCUITS];
  61. memset (zero, 0x00, ISIS_MAX_CIRCUITS * 4);
  62. return bcmp (flags, zero, ISIS_MAX_CIRCUITS * 4);
  63. }