Print this page
Overlay fabric router
@@ -1070,45 +1070,29 @@
mutex_exit(&odd->odd_lock);
bzero(&hdr, sizeof (struct msghdr));
bzero(&einfo, sizeof (ovep_encap_info_t));
- einfo.ovdi_id = odd->odd_vid;
+
mp = mp_chain;
while (mp != NULL) {
socklen_t slen;
struct sockaddr_storage storage;
mp_chain = mp->b_next;
mp->b_next = NULL;
ep = NULL;
- /*
- * TODO: we probably need to change 'storage' to a
- * refheld overlay_target_entry_t and also maybe set
- * local vlan from packet header for check below
- */
ret = overlay_target_lookup(odd, mp,
- (struct sockaddr *)&storage, &slen);
+ (struct sockaddr *)&storage, &slen, &einfo.ovdi_id);
if (ret != OVERLAY_TARGET_OK) {
if (ret == OVERLAY_TARGET_DROP)
freemsg(mp);
mp = mp_chain;
continue;
}
- /*
- * TODO:
- * set hdr.msg_name from target_entry
- *
- * if !local:
- * check fabric attachment
- * modify vlan tag, VL2 mac addresses
- *
- * set einfo.ovdi_id to vnet id (move into loop since
- * things cannot assume to all have same vnet id anymore)
- */
hdr.msg_name = &storage;
hdr.msg_namelen = slen;
ret = odd->odd_plugin->ovp_ops->ovpo_encap(odd->odd_mh, mp,
&einfo, &ep);
@@ -2167,19 +2151,37 @@
ddi_fm_fini(dip);
overlay_dip = NULL;
return (DDI_SUCCESS);
}
+#define OVERLAY_IOCTL_MASK 0xffffff00
+/* ARGSUSED */
+static int
+overlay_ioctl(dev_t dev, int cmd, intptr_t arg, int mode, cred_t *credp,
+ int *rvalp)
+{
+ switch (cmd & OVERLAY_IOCTL_MASK) {
+ case OVERLAY_TARG_IOCTL:
+ return (overlay_target_ioctl(dev, cmd, arg, mode, credp,
+ rvalp));
+ case OVERLAY_ROUTER_IOCTL:
+ return (overlay_router_ioctl(dev, cmd, arg, mode, credp,
+ rvalp));
+ default:
+ return (ENOTTY);
+ }
+}
+
static struct cb_ops overlay_cbops = {
overlay_target_open, /* cb_open */
overlay_target_close, /* cb_close */
nodev, /* cb_strategy */
nodev, /* cb_print */
nodev, /* cb_dump */
nodev, /* cb_read */
nodev, /* cb_write */
- overlay_target_ioctl, /* cb_ioctl */
+ overlay_ioctl, /* cb_ioctl */
nodev, /* cb_devmap */
nodev, /* cb_mmap */
nodev, /* cb_segmap */
nochpoll, /* cb_chpoll */
ddi_prop_op, /* cb_prop_op */