Print this page
Overlay fabric router

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/io/overlay/overlay.c
          +++ new/usr/src/uts/common/io/overlay/overlay.c
↓ open down ↓ 1064 lines elided ↑ open up ↑
1065 1065                  mutex_exit(&odd->odd_lock);
1066 1066                  freemsgchain(mp_chain);
1067 1067                  return (NULL);
1068 1068          }
1069 1069          overlay_io_start(odd, OVERLAY_F_IN_TX);
1070 1070          mutex_exit(&odd->odd_lock);
1071 1071  
1072 1072          bzero(&hdr, sizeof (struct msghdr));
1073 1073  
1074 1074          bzero(&einfo, sizeof (ovep_encap_info_t));
1075      -        einfo.ovdi_id = odd->odd_vid;
     1075 +
1076 1076          mp = mp_chain;
1077 1077          while (mp != NULL) {
1078 1078                  socklen_t slen;
1079 1079                  struct sockaddr_storage storage;
1080 1080  
1081 1081                  mp_chain = mp->b_next;
1082 1082                  mp->b_next = NULL;
1083 1083                  ep = NULL;
1084 1084  
1085      -                /*
1086      -                 * TODO: we probably need to change 'storage' to a
1087      -                 * refheld overlay_target_entry_t and also maybe set
1088      -                 * local vlan from packet header for check below
1089      -                 */
1090 1085                  ret = overlay_target_lookup(odd, mp,
1091      -                    (struct sockaddr *)&storage, &slen);
     1086 +                    (struct sockaddr *)&storage, &slen, &einfo.ovdi_id);
1092 1087                  if (ret != OVERLAY_TARGET_OK) {
1093 1088                          if (ret == OVERLAY_TARGET_DROP)
1094 1089                                  freemsg(mp);
1095 1090                          mp = mp_chain;
1096 1091                          continue;
1097 1092                  }
1098 1093  
1099      -                /*
1100      -                 * TODO:
1101      -                 *      set hdr.msg_name from target_entry
1102      -                 *
1103      -                 *      if !local:
1104      -                 *              check fabric attachment
1105      -                 *              modify vlan tag, VL2 mac addresses
1106      -                 *
1107      -                 *      set einfo.ovdi_id to vnet id (move into loop since
1108      -                 *      things cannot assume to all have same vnet id anymore)
1109      -                 */
1110 1094                  hdr.msg_name = &storage;
1111 1095                  hdr.msg_namelen = slen;
1112 1096  
1113 1097                  ret = odd->odd_plugin->ovp_ops->ovpo_encap(odd->odd_mh, mp,
1114 1098                      &einfo, &ep);
1115 1099                  if (ret != 0 || ep == NULL) {
1116 1100                          freemsg(mp);
1117 1101                          goto out;
1118 1102                  }
1119 1103  
↓ open down ↓ 1042 lines elided ↑ open up ↑
2162 2146          mutex_exit(&overlay_dev_lock);
2163 2147  
2164 2148  
2165 2149          dld_ioc_unregister(OVERLAY_IOC);
2166 2150          ddi_remove_minor_node(dip, OVERLAY_CTL);
2167 2151          ddi_fm_fini(dip);
2168 2152          overlay_dip = NULL;
2169 2153          return (DDI_SUCCESS);
2170 2154  }
2171 2155  
     2156 +#define OVERLAY_IOCTL_MASK      0xffffff00
     2157 +/* ARGSUSED */
     2158 +static int
     2159 +overlay_ioctl(dev_t dev, int cmd, intptr_t arg, int mode, cred_t *credp,
     2160 +    int *rvalp)
     2161 +{
     2162 +        switch (cmd & OVERLAY_IOCTL_MASK) {
     2163 +        case OVERLAY_TARG_IOCTL:
     2164 +                return (overlay_target_ioctl(dev, cmd, arg, mode, credp,
     2165 +                    rvalp));
     2166 +        case OVERLAY_ROUTER_IOCTL:
     2167 +                return (overlay_router_ioctl(dev, cmd, arg, mode, credp,
     2168 +                    rvalp));
     2169 +        default:
     2170 +                return (ENOTTY);
     2171 +        }
     2172 +}
     2173 +
2172 2174  static struct cb_ops overlay_cbops = {
2173 2175          overlay_target_open,    /* cb_open */
2174 2176          overlay_target_close,   /* cb_close */
2175 2177          nodev,                  /* cb_strategy */
2176 2178          nodev,                  /* cb_print */
2177 2179          nodev,                  /* cb_dump */
2178 2180          nodev,                  /* cb_read */
2179 2181          nodev,                  /* cb_write */
2180      -        overlay_target_ioctl,   /* cb_ioctl */
     2182 +        overlay_ioctl,          /* cb_ioctl */
2181 2183          nodev,                  /* cb_devmap */
2182 2184          nodev,                  /* cb_mmap */
2183 2185          nodev,                  /* cb_segmap */
2184 2186          nochpoll,               /* cb_chpoll */
2185 2187          ddi_prop_op,            /* cb_prop_op */
2186 2188          NULL,                   /* cb_stream */
2187 2189          D_MP,                   /* cb_flag */
2188 2190          CB_REV,                 /* cb_rev */
2189 2191          nodev,                  /* cb_aread */
2190 2192          nodev,                  /* cb_awrite */
↓ open down ↓ 87 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX