Line data Source code
1 : /* 2 : * vr_mpls.h -- 3 : * 4 : * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved. 5 : * Copyright Contributors to the OpenSDN project 6 : */ 7 : #ifndef __VR_MPLS_H__ 8 : #define __VR_MPLS_H__ 9 : 10 : #include "vr_types.h" 11 : 12 : #define VR_MPLS_LABEL_SHIFT 12 13 : #define VR_MPLS_EXP_QOS_SHIFT 9 14 : #define VR_MPLS_HDR_LEN 4 15 : #define VR_MAX_UCAST_LABELS 1024 16 : #define VR_DEF_LABELS 5120 17 : #define VR_MPLS_STACK_BIT (0x1 << 8) 18 : 19 : #define VR_MPLS_OVER_UDP_OLD_DST_PORT 51234 20 : #define VR_MPLS_OVER_UDP_NEW_DST_PORT 6635 21 : #define VR_MPLS_OVER_UDP_DST_PORT VR_MPLS_OVER_UDP_NEW_DST_PORT 22 : #define VR_MPLS_OVER_UDP_SRC_PORT 51000 23 : #define VR_MUDP_PORT_RANGE_START 49152 24 : #define VR_MUDP_PORT_RANGE_END 65535 25 : 26 : #define VR_VXLAN_UDP_DST_PORT 4789 27 : #define VR_VXLAN_UDP_SRC_PORT 52000 28 : #define VR_MPLS_LABEL_STACK_BIT_MASK 0x100 29 : #define VR_MPLS_LABEL_MASK 0XFFFFF 30 : struct vrouter; 31 : struct vr_packet; 32 : struct vr_forwarding_md; 33 : 34 : extern int vr_mpls_init(struct vrouter *); 35 : extern void vr_mpls_exit(struct vrouter *, bool); 36 : extern int vr_mpls_dump(vr_mpls_req *); 37 : extern int vr_mpls_get(vr_mpls_req *); 38 : extern int vr_mpls_add(vr_mpls_req *); 39 : extern int vr_mpls_tunnel_type(unsigned int , unsigned int, unsigned short *); 40 : extern struct vr_nexthop *__vrouter_get_label(struct vrouter *, unsigned int); 41 : extern int vr_mpls_input(struct vrouter *, struct vr_packet *, 42 : struct vr_forwarding_md *); 43 : 44 : 45 : static inline bool 46 10 : vr_mpls_udp_port(unsigned short port) 47 : { 48 10 : if ((port == VR_MPLS_OVER_UDP_OLD_DST_PORT) || 49 : (port == VR_MPLS_OVER_UDP_NEW_DST_PORT)) 50 7 : return true; 51 : 52 3 : return false; 53 : } 54 : 55 : static inline bool 56 1 : vr_vxlan_udp_port(unsigned short port) 57 : { 58 1 : if (port == VR_VXLAN_UDP_DST_PORT) 59 0 : return true; 60 : 61 1 : return false; 62 : } 63 : 64 : #endif /* __VR_MPLS_H__ */