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,83 ****
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_query_data_t;
typedef void (*svp_query_f)(svp_query_t *, void *);
typedef enum svp_query_state {
--- 72,83 ----
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_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,264 ****
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 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_cb_t;
/*
* Core implementation structure.
*/
--- 245,265 ----
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);
! 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_route_lookup_f scb_route_lookup;
} svp_cb_t;
/*
* Core implementation structure.
*/
*** 274,284 ****
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?) */
};
extern bunyan_logger_t *svp_bunyan;
extern int svp_remote_find(char *, uint16_t, struct in6_addr *,
--- 275,286 ----
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 */
! /* 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,299 ****
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,
uint16_t, void *);
/*
* Init functions
--- 290,301 ----
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_route_lookup(svp_t *, svp_query_t *,
! const struct in6_addr *, const struct in6_addr *, uint32_t,
uint16_t, void *);
/*
* Init functions