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.

@@ -72,12 +72,12 @@
         svp_vl2_ack_t   sqd_vl2a;
         svp_vl3_req_t   sdq_vl3r;
         svp_vl3_ack_t   sdq_vl3a;
         svp_log_req_t   sdq_logr;
         svp_lrm_ack_t   sdq_lrma;
-        svp_rvl3_req_t  sqd_rvl3r;
-        svp_rvl3_ack_t  sqd_rvl3a;
+        svp_route_req_t sqd_rr;
+        svp_route_ack_t sqd_ra;
 } svp_query_data_t;
 
 typedef void (*svp_query_f)(svp_query_t *, void *);
 
 typedef enum svp_query_state {

@@ -245,20 +245,21 @@
 typedef void (*svp_vl2_invalidation_f)(svp_t *, const uint8_t *);
 typedef void (*svp_vl3_inject_f)(svp_t *, const uint16_t,
     const struct in6_addr *, const uint8_t *, const uint8_t *);
 typedef void (*svp_shootdown_f)(svp_t *, const uint8_t *,
     const struct in6_addr *, const uint16_t uport);
-/* XXX KEBE SAYS FILL ME IN! */
-typedef void (*svp_rvl3_lookup_f)(svp_t *, svp_status_t, void *);
+typedef void (*svp_route_lookup_f)(svp_t *, svp_status_t, uint32_t, uint32_t,
+    uint16_t, uint8_t *, uint8_t *, uint16_t, uint8_t *, uint8_t, uint8_t,
+    void *);
 
 typedef struct svp_cb {
         svp_vl2_lookup_f        scb_vl2_lookup;
         svp_vl3_lookup_f        scb_vl3_lookup;
         svp_vl2_invalidation_f  scb_vl2_invalidate;
         svp_vl3_inject_f        scb_vl3_inject;
         svp_shootdown_f         scb_shootdown;
-        svp_rvl3_lookup_f       scb_rvl3_lookup;
+        svp_route_lookup_f      scb_route_lookup;
 } svp_cb_t;
 
 /*
  * Core implementation structure.
  */

@@ -274,11 +275,12 @@
         uint16_t                svp_port;       /* svp_lock */
         uint16_t                svp_uport;      /* svp_lock */
         uint32_t                svp_dcid;       /* svp_lock (but write-once?) */
         boolean_t               svp_huip;       /* svp_lock */
         struct in6_addr         svp_uip;        /* svp_lock */
-        struct ether_addr       svp_router_mac; /* svp_lock (but write-once?) */
+        /* NOTE: lower-3 bytes are 0s. */
+        uint8_t         svp_router_oui[6];      /* svp_lock (but write-once?) */
 };
 
 extern bunyan_logger_t *svp_bunyan;
 
 extern int svp_remote_find(char *, uint16_t, struct in6_addr *,

@@ -288,12 +290,12 @@
 extern void svp_remote_release(svp_remote_t *);
 extern void svp_remote_vl3_lookup(svp_t *, svp_query_t *,
     const struct sockaddr *, void *);
 extern void svp_remote_vl2_lookup(svp_t *, svp_query_t *, const uint8_t *,
     void *);
-extern void svp_remote_rvl3_lookup(svp_t *, svp_query_t *,
-    const struct in6_addr *, const struct in6_addr *, uint32_t, uint32_t,
+extern void svp_remote_route_lookup(svp_t *, svp_query_t *,
+    const struct in6_addr *, const struct in6_addr *, uint32_t,
     uint16_t, void *);
 
 
 /*
  * Init functions