/*
 * IS-IS Rout(e)ing protocol - isis_common.h  
 *                             some common data structures
 *
 * Copyright (C) 2001,2002   Sampo Saaristo
 *                           Tampere University of Technology      
 *                           Institute of Communications Engineering
 *
 * This program is free software; you can redistribute it and/or modify it 
 * under the terms of the GNU General Public Licenseas published by the Free 
 * Software Foundation; either version 2 of the License, or (at your option) 
 * any later version.
 *
 * This program is distributed in the hope that it will be useful,but WITHOUT 
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for 
 * more details.

 * You should have received a copy of the GNU General Public License along 
 * with this program; if not, write to the Free Software Foundation, Inc., 
 * 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */

/*
 * Area Address
 */
struct area_addr
{
  u_char addr_len;
  u_char area_addr[20];
};

struct isis_passwd
{
  u_char len;
#define ISIS_PASSWD_TYPE_UNUSED   0
#define ISIS_PASSWD_TYPE_CLEARTXT 1
#define ISIS_PASSWD_TYPE_PRIVATE  255
  u_char type;
  /* Authenticate SNPs? */
#define SNP_AUTH_SEND   0x01
#define SNP_AUTH_RECV   0x02
  u_char snp_auth;
  u_char passwd[255];
};

/*
 * (Dynamic) Hostname
 * one struct for cache list
 * one struct for LSP TLV
 */
struct hostname
{
  u_char namelen;
  u_char name[255];
};

/*
 * Supported Protocol IDs
 */
struct nlpids
{
  u_char count;
  u_char nlpids[4];		/* FIXME: enough ? */
};

/*
 * Flags structure for SSN and SRM flags
 */
struct flags
{
  int maxindex;
  struct list *free_idcs;
};
