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.

Split Close
Expand all
Collapse all
          --- old/usr/src/lib/varpd/svp/common/libvarpd_svp_prot.h
          +++ new/usr/src/lib/varpd/svp/common/libvarpd_svp_prot.h
↓ open down ↓ 53 lines elided ↑ open up ↑
  54   54          SVP_R_VL2_ACK           = 0x04,
  55   55          SVP_R_VL3_REQ           = 0x05,
  56   56          SVP_R_VL3_ACK           = 0x06,
  57   57          SVP_R_BULK_REQ          = 0x07,
  58   58          SVP_R_BULK_ACK          = 0x08,
  59   59          SVP_R_LOG_REQ           = 0x09,
  60   60          SVP_R_LOG_ACK           = 0x0A,
  61   61          SVP_R_LOG_RM            = 0x0B,
  62   62          SVP_R_LOG_RM_ACK        = 0x0C,
  63   63          SVP_R_SHOOTDOWN         = 0x0D,
  64      -        SVP_R_REMOTE_VL3_REQ    = 0x0E,
  65      -        SVP_R_REMOTE_VL3_ACK    = 0x0F
       64 +        SVP_R_ROUTE_REQ         = 0x0E,
       65 +        SVP_R_ROUTE_ACK         = 0x0F
  66   66  } svp_op_t;
  67   67  
  68   68  typedef enum svp_status {
  69   69          SVP_S_OK        = 0x00, /* Everything OK */
  70   70          SVP_S_FATAL     = 0x01, /* Fatal error, close connection */
  71   71          SVP_S_NOTFOUND  = 0x02, /* Entry not found */
  72   72          SVP_S_BADL3TYPE = 0x03, /* Unknown svp_vl3_type_t */
  73   73          SVP_S_BADBULK   = 0x04  /* Unknown svp_bulk_type_t */
  74   74  } svp_status_t;
  75   75  
  76   76  /*
  77      - * A client issues the SVP_R_VL2_REQ whenever it needs to perform a VLS->UL3
       77 + * A client issues the SVP_R_VL2_REQ whenever it needs to perform a VL2->UL3
  78   78   * lookup. Requests have the following structure:
  79   79   */
  80   80  typedef struct svp_vl2_req {
  81   81          uint8_t         sl2r_mac[ETHERADDRL];
  82   82          uint8_t         sl2r_pad[2];
  83   83          uint32_t        sl2r_vnetid;
  84   84  } svp_vl2_req_t;
  85   85  
  86   86  /*
  87   87   * This is the message a server uses to reply to the SVP_R_VL2_REQ.  If the
↓ open down ↓ 29 lines elided ↑ open up ↑
 117  117   * the VL3->VL2 and the VL2->UL3 requests.
 118  118   */
 119  119  typedef struct svp_vl3_ack {
 120  120          uint32_t        sl3a_status;
 121  121          uint8_t         sl3a_mac[ETHERADDRL];
 122  122          uint16_t        sl3a_uport;
 123  123          uint8_t         sl3a_uip[16];
 124  124  } svp_vl3_ack_t;
 125  125  
 126  126  /*
 127      - * A client issues the SVP_R_REMOTE_VL3_REQ for a far-remote (cross-DC) VL3 IP
 128      - * address.  The server may take longer because it may query cross-DC to get
 129      - * the answer for our response.
 130      - */
 131      -typedef struct svp_rvl3_req {
 132      -        uint8_t         srl3r_srcip[16];
 133      -        uint8_t         srl3r_dstip[16];
 134      -        uint32_t        srl3r_type;     /* Same as SVP_R_VL3_REQ */
 135      -        uint32_t        srl3r_vnetid;
 136      -        uint16_t        srl3r_vlan;
 137      -        uint16_t        srl3r_pad;      /* XXX KEBE ASKS, necessary? */
 138      -} svp_rvl3_req_t;
 139      -
 140      -/*
 141      - * The remote-VL3 response contains more than the regular VL3 one, because
 142      - * overlay needs to rewrite the MAC header completely.
 143      - */
 144      -typedef struct svp_rvl3_ack {
 145      -        uint32_t        srl3a_status;
 146      -        uint8_t         srl3a_dstmac[ETHERADDRL]; /* MAC of the target. */
 147      -        uint8_t         srl3a_srcmac[ETHERADDRL]; /* MAC of the target's rtr */
 148      -        uint16_t        srl3a_vlanid;
 149      -        uint16_t        srl3a_uport;
 150      -        uint32_t        srl3a_dcid;     /* Remote Data Center ID. */
 151      -        uint8_t         srl3a_uip[16];
 152      -} svp_rvl3_ack_t;
 153      -
 154      -/*
 155  127   * SVP_R_BULK_REQ requests a bulk dump of data. Currently we have two kinds of
 156  128   * data tables that we need to dump: VL3->VL2 mappings and VL2->UL3 mappings.
 157  129   * The kind that we want is indicated using the svbr_type member.
 158  130   */
 159  131  typedef enum svp_bulk_type {
 160  132          SVP_BULK_VL2    = 0x01,
 161  133          SVP_BULK_VL3    = 0x02
 162  134  } svp_bulk_type_t;
 163  135  
 164  136  typedef struct svp_bulk_req {
↓ open down ↓ 89 lines elided ↑ open up ↑
 254  226   * a node receives this, it will issue a conditional revocation ioctl, that
 255  227   * removes the entry if and only if, it matches the IP. That way if we've
 256  228   * already gotten an updated entry for this, we don't remove it again.
 257  229   */
 258  230  typedef struct svp_shootdown {
 259  231          uint8_t         svsd_mac[ETHERADDRL];
 260  232          uint8_t         svsd_pad[2];
 261  233          uint32_t        svsd_vnetid;
 262  234  } svp_shootdown_t;
 263  235  
      236 +/*
      237 + * A route-request (SVP_R_ROUTE_REQ) queries the local SVP server to get a
      238 + * far-remote (i.e. another Triton Data Center, nee. SDC) SVP server for
      239 + * far-remote networks.  Modern overlay modules will request IP destinations
      240 + * for remote-Triton networks, but they must know how to reach the
      241 + * remote-Triton SVP server.
      242 + */
      243 +typedef struct svp_route_req {
      244 +        uint32_t        srr_vnetid;     /* Requester's vnet ID. */
      245 +        uint16_t        srr_vlan;       /* Requester's VLAN ID. */
      246 +        uint16_t        srr_pad;        /* Zero on xmit, ignore on receipt. */
      247 +        uint8_t         srr_srcip[16];  /* VL3 Source IP. */
      248 +        uint8_t         srr_dstip[16];  /* VL3 Destination IP. */
      249 +} svp_route_req_t;
      250 +
      251 +/*
      252 + * The far-remote Triton Data Center will answer with the requisite information
      253 + * to send overlay packets to the appropriate far-remote CNs.
      254 + */
      255 +typedef struct svp_route_ack {
      256 +        uint32_t        sra_status;     /* Status. */
      257 +        uint32_t        sra_dcid;       /* Far-remote Data Center ID. */
      258 +        uint32_t        sra_vnetid;     /* Far-remote vnet ID. */
      259 +        uint16_t        sra_vlan;       /* Far-remote VLAN ID. */
      260 +        uint16_t        sra_port;       /* Destination UL3 port. */
      261 +        uint8_t         sra_ip[16];     /* Destination UL3 address. */
      262 +        uint8_t sra_srcmac[ETHERADDRL]; /* Far-remote VL2 source. */
      263 +        uint8_t sra_dstmac[ETHERADDRL]; /* Far-remote VL2 dest. */
      264 +        uint8_t         sra_src_pfx;    /* Far-remote VL3 source prefix */
      265 +        uint8_t         sra_dst_pfx;    /* Far-remote VL3 dest. prefix */
      266 +} svp_route_ack_t;
      267 +
 264  268  #ifdef __cplusplus
 265  269  }
 266  270  #endif
 267  271  
 268  272  #endif /* _LIBVARPD_SVP_PROT_H */
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX