mirror of
				https://git.proxmox.com/git/mirror_frr
				synced 2025-11-04 11:38:49 +00:00 
			
		
		
		
	The int return value is never used. Modify the code base to just return a void instead. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
		
			
				
	
	
		
			159 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			159 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* ICMP Router Discovery Messages
 | 
						|
 * Copyright (C) 1997, 2000 Kunihiro Ishiguro
 | 
						|
 *
 | 
						|
 * This file is part of GNU Zebra.
 | 
						|
 *
 | 
						|
 * GNU Zebra is free software; you can redistribute it and/or modify it
 | 
						|
 * under the terms of the GNU General Public License as published by the
 | 
						|
 * Free Software Foundation; either version 2, or (at your option) any
 | 
						|
 * later version.
 | 
						|
 *
 | 
						|
 * GNU Zebra 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; see the file COPYING; if not, write to the Free Software
 | 
						|
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 | 
						|
 */
 | 
						|
 | 
						|
/*
 | 
						|
 * This file is modified and completed for the Zebra IRDP implementation
 | 
						|
 * by Robert Olsson, Swedish University of Agricultural Sciences
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef _IRDP_H
 | 
						|
#define _IRDP_H
 | 
						|
 | 
						|
#include "lib/vty.h"
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
/* ICMP Messages */
 | 
						|
#ifndef ICMP_ROUTERADVERT
 | 
						|
#define ICMP_ROUTERADVERT 9
 | 
						|
#endif /* ICMP_ROUTERADVERT */
 | 
						|
 | 
						|
#ifndef ICMP_ROUTERSOLICIT
 | 
						|
#define ICMP_ROUTERSOLICIT 10
 | 
						|
#endif /* ICMP_ROUTERSOLICT */
 | 
						|
 | 
						|
/* Multicast groups */
 | 
						|
#ifndef INADDR_ALLHOSTS_GROUP
 | 
						|
#define INADDR_ALLHOSTS_GROUP 0xe0000001U    /* 224.0.0.1 */
 | 
						|
#endif /* INADDR_ALLHOSTS_GROUP */
 | 
						|
 | 
						|
#ifndef INADDR_ALLRTRS_GROUP
 | 
						|
#define INADDR_ALLRTRS_GROUP  0xe0000002U    /* 224.0.0.2 */
 | 
						|
#endif /* INADDR_ALLRTRS_GROUP */
 | 
						|
 | 
						|
/* Default irdp packet interval */
 | 
						|
#define IRDP_DEFAULT_INTERVAL 300
 | 
						|
 | 
						|
/* Router constants from RFC1256 */
 | 
						|
#define MAX_INITIAL_ADVERT_INTERVAL 16
 | 
						|
#define MAX_INITIAL_ADVERTISEMENTS   3
 | 
						|
#define MAX_RESPONSE_DELAY           2
 | 
						|
 | 
						|
#define IRDP_MAXADVERTINTERVAL 600
 | 
						|
#define IRDP_MINADVERTINTERVAL 450 /* 0.75*600 */
 | 
						|
#define IRDP_LIFETIME         1350 /* 3*450 */
 | 
						|
#define IRDP_PREFERENCE 0
 | 
						|
 | 
						|
#define ICMP_MINLEN 8
 | 
						|
 | 
						|
#define IRDP_LAST_ADVERT_MESSAGES 2 /* The last adverts with Holdtime 0 */
 | 
						|
 | 
						|
#define IRDP_RX_BUF 1500
 | 
						|
 | 
						|
/*
 | 
						|
     Comments comes from RFC1256 ICMP Router Discovery Messages.
 | 
						|
 | 
						|
     The IP destination address to be used for multicast Router
 | 
						|
     Advertisements sent from the interface.  The only permissible
 | 
						|
     values are the all-systems multicast address, 224.0.0.1, or the
 | 
						|
     limited-broadcast address, 255.255.255.255.  (The all-systems
 | 
						|
     address is preferred wherever possible, i.e., on any link where
 | 
						|
     all listening hosts support IP multicast.)
 | 
						|
 | 
						|
     Default: 224.0.0.1 if the router supports IP multicast on the
 | 
						|
     interface, else 255.255.255.255
 | 
						|
 | 
						|
     The maximum time allowed between sending multicast Router
 | 
						|
     Advertisements from the interface, in seconds.  Must be no less
 | 
						|
     than 4 seconds and no greater than 1800 seconds.
 | 
						|
 | 
						|
     Default: 600 seconds
 | 
						|
 | 
						|
     The minimum time allowed between sending unsolicited multicast
 | 
						|
     Router Advertisements from the interface, in seconds.  Must be no
 | 
						|
     less than 3 seconds and no greater than MaxAdvertisementInterval.
 | 
						|
 | 
						|
     Default: 0.75 * MaxAdvertisementInterval
 | 
						|
 | 
						|
     The value to be placed in the Lifetime field of Router
 | 
						|
     Advertisements sent from the interface, in seconds.  Must be no
 | 
						|
     less than MaxAdvertisementInterval and no greater than 9000
 | 
						|
     seconds.
 | 
						|
 | 
						|
     Default: 3 * MaxAdvertisementInterval
 | 
						|
 | 
						|
     The preferability of the address as a default router address,
 | 
						|
     relative to other router addresses on the same subnet.  A 32-bit,
 | 
						|
     signed, twos-complement integer, with higher values meaning more
 | 
						|
     preferable.  The minimum value (hex 80000000) is used to indicate
 | 
						|
     that the address, even though it may be advertised, is not to be
 | 
						|
     used by neighboring hosts as a default router address.
 | 
						|
 | 
						|
     Default: 0
 | 
						|
*/
 | 
						|
 | 
						|
struct irdp_interface {
 | 
						|
	bool started;
 | 
						|
 | 
						|
	unsigned long MaxAdvertInterval;
 | 
						|
	unsigned long MinAdvertInterval;
 | 
						|
	unsigned long Preference;
 | 
						|
 | 
						|
	uint32_t flags;
 | 
						|
 | 
						|
#define IF_ACTIVE               (1<<0) /* ICMP Active */
 | 
						|
#define IF_BROADCAST            (1<<1) /* 255.255.255.255 */
 | 
						|
#define IF_SOLICIT              (1<<2) /* Solicit active */
 | 
						|
#define IF_DEBUG_MESSAGES       (1<<3)
 | 
						|
#define IF_DEBUG_PACKET         (1<<4)
 | 
						|
#define IF_DEBUG_MISC           (1<<5)
 | 
						|
#define IF_SHUTDOWN             (1<<6)
 | 
						|
 | 
						|
	struct interface *ifp;
 | 
						|
	struct thread *t_advertise;
 | 
						|
	unsigned long irdp_sent;
 | 
						|
	uint16_t Lifetime;
 | 
						|
 | 
						|
	struct list *AdvPrefList;
 | 
						|
};
 | 
						|
 | 
						|
struct Adv {
 | 
						|
	struct in_addr ip;
 | 
						|
	int pref;
 | 
						|
};
 | 
						|
 | 
						|
extern void irdp_if_init(void);
 | 
						|
extern int irdp_sock_init(void);
 | 
						|
extern int irdp_config_write(struct vty *, struct interface *);
 | 
						|
extern void irdp_send_thread(struct thread *t_advert);
 | 
						|
extern void irdp_advert_off(struct interface *ifp);
 | 
						|
extern void process_solicit(struct interface *ifp);
 | 
						|
extern void irdp_read_raw(struct thread *r);
 | 
						|
extern void send_packet(struct interface *ifp, struct stream *s, uint32_t dst,
 | 
						|
			struct prefix *p, uint32_t ttl);
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif /* _IRDP_H */
 |