Print this page
Restore SVP_R_ROUTE_REQ, and all that goes with it.
Interpret sl3a_uport == 0 in SVP_R_VL3_ACK to indicate the VL3 IP is a next-hop router.
*** 59,70 ****
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_REMOTE_VL3_REQ = 0x0E,
! SVP_R_REMOTE_VL3_ACK = 0x0F
} svp_op_t;
typedef enum svp_status {
SVP_S_OK = 0x00, /* Everything OK */
SVP_S_FATAL = 0x01, /* Fatal error, close connection */
--- 59,70 ----
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 */
*** 72,82 ****
SVP_S_BADL3TYPE = 0x03, /* Unknown svp_vl3_type_t */
SVP_S_BADBULK = 0x04 /* Unknown svp_bulk_type_t */
} svp_status_t;
/*
! * A client issues the SVP_R_VL2_REQ whenever it needs to perform a VLS->UL3
* lookup. Requests have the following structure:
*/
typedef struct svp_vl2_req {
uint8_t sl2r_mac[ETHERADDRL];
uint8_t sl2r_pad[2];
--- 72,82 ----
SVP_S_BADL3TYPE = 0x03, /* Unknown svp_vl3_type_t */
SVP_S_BADBULK = 0x04 /* Unknown svp_bulk_type_t */
} svp_status_t;
/*
! * A client issues the SVP_R_VL2_REQ whenever it needs to perform a VL2->UL3
* lookup. Requests have the following structure:
*/
typedef struct svp_vl2_req {
uint8_t sl2r_mac[ETHERADDRL];
uint8_t sl2r_pad[2];
*** 122,159 ****
uint16_t sl3a_uport;
uint8_t sl3a_uip[16];
} svp_vl3_ack_t;
/*
- * A client issues the SVP_R_REMOTE_VL3_REQ for a far-remote (cross-DC) VL3 IP
- * address. The server may take longer because it may query cross-DC to get
- * the answer for our response.
- */
- typedef struct svp_rvl3_req {
- uint8_t srl3r_srcip[16];
- uint8_t srl3r_dstip[16];
- uint32_t srl3r_type; /* Same as SVP_R_VL3_REQ */
- uint32_t srl3r_vnetid;
- uint16_t srl3r_vlan;
- uint16_t srl3r_pad; /* XXX KEBE ASKS, necessary? */
- } svp_rvl3_req_t;
-
- /*
- * The remote-VL3 response contains more than the regular VL3 one, because
- * overlay needs to rewrite the MAC header completely.
- */
- typedef struct svp_rvl3_ack {
- uint32_t srl3a_status;
- uint8_t srl3a_dstmac[ETHERADDRL]; /* MAC of the target. */
- uint8_t srl3a_srcmac[ETHERADDRL]; /* MAC of the target's rtr */
- uint16_t srl3a_vlanid;
- uint16_t srl3a_uport;
- uint32_t srl3a_dcid; /* Remote Data Center ID. */
- uint8_t srl3a_uip[16];
- } svp_rvl3_ack_t;
-
- /*
* SVP_R_BULK_REQ requests a bulk dump of data. Currently we have two kinds of
* data tables that we need to dump: VL3->VL2 mappings and VL2->UL3 mappings.
* The kind that we want is indicated using the svbr_type member.
*/
typedef enum svp_bulk_type {
--- 122,131 ----
*** 259,268 ****
--- 231,272 ----
uint8_t svsd_mac[ETHERADDRL];
uint8_t svsd_pad[2];
uint32_t svsd_vnetid;
} svp_shootdown_t;
+ /*
+ * 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.
+ */
+ 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. */
+ uint8_t srr_srcip[16]; /* VL3 Source IP. */
+ uint8_t srr_dstip[16]; /* VL3 Destination IP. */
+ } svp_route_req_t;
+
+ /*
+ * The far-remote Triton Data Center will answer with the requisite information
+ * to send overlay packets to the appropriate far-remote CNs.
+ */
+ typedef struct svp_route_ack {
+ uint32_t sra_status; /* Status. */
+ uint32_t sra_dcid; /* Far-remote Data Center ID. */
+ uint32_t sra_vnetid; /* Far-remote vnet ID. */
+ uint16_t sra_vlan; /* Far-remote VLAN ID. */
+ uint16_t sra_port; /* Destination UL3 port. */
+ uint8_t sra_ip[16]; /* Destination UL3 address. */
+ uint8_t sra_srcmac[ETHERADDRL]; /* Far-remote VL2 source. */
+ uint8_t sra_dstmac[ETHERADDRL]; /* Far-remote VL2 dest. */
+ uint8_t sra_src_pfx; /* Far-remote VL3 source prefix */
+ uint8_t sra_dst_pfx; /* Far-remote VL3 dest. prefix */
+ } svp_route_ack_t;
+
#ifdef __cplusplus
}
#endif
#endif /* _LIBVARPD_SVP_PROT_H */