示例#1
0
WedgePlatform::InitPortMap WedgePlatform::initPorts() {
  InitPortMap ports;

  auto add_port = [&](int num) {
      PortID portID(num);
      opennsl_port_t bcmPortNum = num;

      auto port = make_unique<WedgePort>(portID);
      ports.emplace(bcmPortNum, port.get());
      ports_.emplace(portID, std::move(port));
  };

  // Wedge has 16 QSFPs, each mapping to 4 physical ports.
  int portNum = 0;

  auto add_ports = [&](int n_ports) {
    while (n_ports--) {
      ++portNum;
      add_port(portNum);
    }
  };

  auto add_ports_stride = [&](int n_ports, int start, int stride) {
    int curr = start;
    while (n_ports--) {
      add_port(curr);
      curr += stride;
    }
  };

  if (mode_ == WEDGE || mode_ == LC) {
    // Front panel are 16 4x10G ports
    add_ports(16 * 4);
    if (mode_ == LC) {
      // On LC, another 16 ports for back plane ports
      add_ports(16);
    }
  } else if (mode_ == FC) {
    // On FC, 32 40G ports
    add_ports(32);
  } else {
    add_ports_stride(8 * 4, 1, 1);
    add_ports_stride(8 * 4, 34, 1);
    add_ports_stride(8 * 4, 68, 1);
    add_ports_stride(8 * 4, 102, 1);
  }

  return ports;
}
示例#2
0
WedgePlatform::InitPortMap WedgePlatform::initPorts() {
  InitPortMap ports;
  enum {
    WEDGE,
    LC,
    FC,
  } mode;

  if (FLAGS_mode == "wedge") {
    mode = WEDGE;
  } else if (FLAGS_mode == "lc") {
    mode = LC;
  } else if (FLAGS_mode == "fc") {
    mode = FC;
  } else {
    throw std::runtime_error("invalide mode " + FLAGS_mode);
  }
  // Wedge has 16 QSFPs, each mapping to 4 physical ports.
  int portNum = 0;

  auto add_ports = [&](int n_ports) {
    while (n_ports--) {
      ++portNum;
      PortID portID(portNum);
      opennsl_port_t bcmPortNum = portNum;

      auto port = make_unique<WedgePort>(portID);
      ports.emplace(bcmPortNum, port.get());
      ports_.emplace(portID, std::move(port));
    }
  };

  if (mode == WEDGE || mode == LC) {
    // Front panel are 16 4x10G ports
    add_ports(16 * 4);
    if (mode == LC) {
      // On LC, another 16 ports for back plane ports
      add_ports(16);
    }
  } else {
    // On FC, 32 40G ports
    add_ports(32);
  }

  return ports;
}
示例#3
0
WedgePlatform::InitPortMap WedgePlatform::initPorts() {
  InitPortMap ports;

  // Wedge has 16 QSFPs, each mapping to 4 physical ports.
  int portNum = 0;
  for (int mod = 0; mod < 16; ++mod) {
    // Eventually we should define objects for each of the QSFPs here.
    for (int channel = 0; channel < 4; ++channel) {
      ++portNum;
      PortID portID(portNum);
      opennsl_port_t bcmPortNum = portNum;

      auto port = make_unique<WedgePort>(portID);
      ports.emplace(bcmPortNum, port.get());
      ports_.emplace(portID, std::move(port));
    }
  }

  return ports;
}