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 */