Print this page
Version bump SVP to 2

*** 33,53 **** * SDC VXLAN Protocol Definitions */ #define SVP_VERSION_ONE 1 #define SVP_VERSION_TWO 2 ! /* XXX KEBE SAYS -- we are not yet ready to bump this. */ ! #define SVP_CURRENT_VERSION SVP_VERSION_ONE typedef struct svp_req { uint16_t svp_ver; uint16_t svp_op; uint32_t svp_size; uint32_t svp_id; uint32_t svp_crc32; } svp_req_t; typedef enum svp_op { SVP_R_UNKNOWN = 0x00, SVP_R_PING = 0x01, SVP_R_PONG = 0x02, SVP_R_VL2_REQ = 0x03, --- 33,61 ---- * SDC VXLAN Protocol Definitions */ #define SVP_VERSION_ONE 1 #define SVP_VERSION_TWO 2 ! /* ! * Bump this to 2. Version 1 SVP is a subset of version 2, and can be ! * determined using an SVP_R_PING as part of connection establishment. ! * Version-2 specific changes will be highlighed (look for "v2"). ! */ ! #define SVP_CURRENT_VERSION SVP_VERSION_TWO typedef struct svp_req { uint16_t svp_ver; uint16_t svp_op; uint32_t svp_size; uint32_t svp_id; uint32_t svp_crc32; } svp_req_t; + /* + * Unless specified, all message types function identically between v1 and v2 + * of SVP. + */ typedef enum svp_op { SVP_R_UNKNOWN = 0x00, SVP_R_PING = 0x01, SVP_R_PONG = 0x02, SVP_R_VL2_REQ = 0x03,
*** 56,70 **** SVP_R_VL3_ACK = 0x06, SVP_R_BULK_REQ = 0x07, SVP_R_BULK_ACK = 0x08, SVP_R_LOG_REQ = 0x09, SVP_R_LOG_ACK = 0x0A, ! SVP_R_LOG_RM = 0x0B, ! SVP_R_LOG_RM_ACK = 0x0C, SVP_R_SHOOTDOWN = 0x0D, ! SVP_R_ROUTE_REQ = 0x0E, ! SVP_R_ROUTE_ACK = 0x0F } svp_op_t; typedef enum svp_status { SVP_S_OK = 0x00, /* Everything OK */ SVP_S_FATAL = 0x01, /* Fatal error, close connection */ --- 64,78 ---- SVP_R_VL3_ACK = 0x06, SVP_R_BULK_REQ = 0x07, SVP_R_BULK_ACK = 0x08, SVP_R_LOG_REQ = 0x09, SVP_R_LOG_ACK = 0x0A, ! SVP_R_LOG_RM = 0x0B, /* v2 introduces new log type */ ! SVP_R_LOG_RM_ACK = 0x0C, /* See svp_log_route_t */ SVP_R_SHOOTDOWN = 0x0D, ! SVP_R_ROUTE_REQ = 0x0E, /* v2 only */ ! SVP_R_ROUTE_ACK = 0x0F /* v2 only */ } svp_op_t; typedef enum svp_status { SVP_S_OK = 0x00, /* Everything OK */ SVP_S_FATAL = 0x01, /* Fatal error, close connection */
*** 172,182 **** * what it should be. */ typedef enum svp_log_type { SVP_LOG_VL2 = 0x01, SVP_LOG_VL3 = 0x02, ! SVP_LOG_ROUTE = 0x03 } svp_log_type_t; typedef struct svp_log_vl2 { uint32_t svl2_type; /* Should be SVP_LOG_VL2 */ uint8_t svl2_id[16]; /* 16-byte UUID */ --- 180,190 ---- * what it should be. */ typedef enum svp_log_type { SVP_LOG_VL2 = 0x01, SVP_LOG_VL3 = 0x02, ! SVP_LOG_ROUTE = 0x03 /* v2 only */ } svp_log_type_t; typedef struct svp_log_vl2 { uint32_t svl2_type; /* Should be SVP_LOG_VL2 */ uint8_t svl2_id[16]; /* 16-byte UUID */
*** 192,201 **** --- 200,212 ---- uint8_t svl3_pad[2]; uint16_t svl3_vlan; uint32_t svl3_vnetid; } svp_log_vl3_t; + /* + * This log entry only appears on v2 connections. + */ typedef struct svp_log_route { uint32_t svlr_type; /* Should be SVP_LOG_ROUTE */ uint8_t svlr_id[16]; /* 16-byte UUID */ uint32_t svlr_src_vnetid; /* Source VXLAN vnetid. */ uint32_t svlr_dst_vnetid; /* Dest. VXLAN vnetid. */
*** 253,262 **** --- 264,275 ---- * A route-request (SVP_R_ROUTE_REQ) queries the local SVP server to get a * far-remote (i.e. another Triton Data Center, nee. SDC) SVP server for * far-remote networks. Modern overlay modules will request IP destinations * for remote-Triton networks, but they must know how to reach the * remote-Triton SVP server. + * + * NOTE: SVP_R_ROUTE_{REQ,ACK} are only present in SVP v2. */ typedef struct svp_route_req { uint32_t srr_vnetid; /* Requester's vnet ID. */ uint16_t srr_vlan; /* Requester's VLAN ID. */ uint16_t srr_pad; /* Zero on xmit, ignore on receipt. */