/* $OpenBSD: dvmrp.h,v 1.3 2009/03/14 15:32:55 michele Exp $ */ /* * Copyright (c) 2005, 2006 Esben Norby * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* DVMRP protocol definitions */ #ifndef _DVMRP_H_ #define _DVMRP_H_ /* misc */ #define IPPROTO_DVMRP 2 #define AllDVMRPRouters "224.0.0.4" #define DEFAULT_PROBE_INTERVAL 10 #define NBR_TMOUT 35 #define MIN_FLASH_UPDATE_INTERVAL 5 #define ROUTE_REPORT_INTERVAL 60 #define ROUTE_EXPIRATION_TIME 140 #define ROUTE_HOLD_DOWN 2 * ROUTE_REPORT_INTERVAL #define MAX_PRUNE_LIFETIME 2 * 3600 /* 2 hours */ #define PRUNE_RETRANS_TIME 3 /* with exp. back off */ #define GRAFT_RETRANS_TIME 5 /* with exp. back off */ #define DEFAULT_CACHE_LIFETIME 300 #define DEFAULT_METRIC 1 #define MIN_METRIC 1 #define MAX_METRIC 31 #define INFINITY_METRIC 31 #define LAST_MASK 0x80 /* route reports */ #define METRIC_MASK ~LAST_MASK /* route reports */ #define DVMRP_MAJOR_VERSION 3 #define DVMRP_MINOR_VERSION 255 /* DVMRP packet types */ #define PKT_TYPE_DVMRP 0x13 #define DVMRP_CODE_PROBE 0x01 #define DVMRP_CODE_REPORT 0x02 #define DVMRP_CODE_ASK_NBRS 0x03 /* obsolete */ #define DVMRP_CODE_NBRS 0x04 /* obsolete */ #define DVMRP_CODE_ASK_NBRS2 0x05 #define DVMRP_CODE_NBRS2 0x06 #define DVMRP_CODE_PRUNE 0x07 #define DVMRP_CODE_GRAFT 0x08 #define DVMRP_CODE_GRAFT_ACK 0x09 /* DVMRP command types */ #define DVMRP_CMD_NULL 0 #define DVMRP_CMD_AF_INDICATOR 2 #define DVMRP_CMD_SUBNETMASK 3 #define DVMRP_CMD_METRIC 4 #define DVMRP_CMD_FLAGS0 5 #define DVMRP_CMD_INFINITY 6 #define DVMRP_CMD_DEST_ADDR 7 #define DVMRP_CMD_REQ_DEST_ADDR 8 #define DVMRP_CMD_NON_MEM_REPORT 9 #define DVMRP_CMD_NON_MEM_CANCEL 10 /* DVMRP capabilities */ #define DVMRP_CAP_LEAF 0x01 #define DVMRP_CAP_PRUNE 0x02 #define DVMRP_CAP_GENID 0x04 #define DVMRP_CAP_MTRACE 0x08 #define DVMRP_CAP_SNMP 0x10 #define DVMRP_CAP_NETMASK 0x20 #define DVMRP_CAP_DEFAULT (DVMRP_CAP_PRUNE | DVMRP_CAP_GENID | \ DVMRP_CAP_MTRACE) /* DVMRP header */ struct dvmrp_hdr { u_int8_t type; u_int8_t code; u_int16_t chksum; u_int8_t dummy; u_int8_t capabilities; u_int8_t minor_version; u_int8_t major_version; }; /* Prune header */ struct prune_hdr { u_int32_t src_host_addr; u_int32_t group_addr; u_int32_t lifetime; u_int32_t src_netmask; }; #define PRUNE_MIN_LEN 12 /* Graft and Graft Ack header */ struct graft_hdr { u_int32_t src_host_addr; u_int32_t group_addr; u_int32_t src_netmask; }; struct igmpmsg { u_int32_t unused1; u_int32_t unused2; u_int8_t im_msgtype; /* what type of message */ #define IGMPMSG_NOCACHE 1 /* no MFC in the kernel */ #define IGMPMSG_WRONGVIF 2 /* packet came from wrong interface */ #define IGMPMSG_WHOLEPKT 3 /* PIM pkt for user level encap. */ #define IGMPMSG_BW_UPCALL 4 /* BW monitoring upcall */ u_int8_t im_mbz; /* must be zero */ u_int8_t im_vif; /* vif rec'd on */ u_int8_t unused3; struct in_addr im_src, im_dst; }; #endif /* !_DVMRP_H_ */