コード例 #1
0
ファイル: TunManager.cpp プロジェクト: superchild/fboss
void TunManager::addRemoveSourceRouteRule(
    RouterID rid, folly::IPAddress addr, bool add) {
  struct {
    struct nlmsghdr n;
    struct rtmsg r;
    char buf[256];
  } req;

  memset(&req, 0, sizeof(req));
  req.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct rtmsg));
  req.n.nlmsg_flags = NLM_F_REQUEST;
  if (add) {
    req.n.nlmsg_type = RTM_NEWRULE;
    req.n.nlmsg_flags |= NLM_F_CREATE|NLM_F_REPLACE;
  } else {
    req.n.nlmsg_type = RTM_DELRULE;
  }
  req.r.rtm_family = addr.family();
  req.r.rtm_protocol = RTPROT_FBOSS;
  req.r.rtm_scope = RT_SCOPE_UNIVERSE;
  req.r.rtm_type = RTN_UNICAST;
  req.r.rtm_flags = 0;
  // from addr
  addattr_l(&req.n, sizeof(req), FRA_SRC, addr.bytes(), addr.byteCount());
  req.r.rtm_src_len = addr.bitCount(); // match the exact address
  // table rid
  req.r.rtm_table = getTableId(rid);
  auto ret = rtnl_talk(&rth_, &req.n, 0, 0, nullptr);
  sysCheckError(ret, "Failed to ", add ? "add" : "remove",
                " rule for address ", addr,
                " to lookup table ", getTableId(rid),
                " for router ", rid);
  LOG(INFO) << (add ? "Added" : "Removed") << " rule for address " << addr
            << " to lookup table " << getTableId(rid) << " for router " << rid;
}
コード例 #2
0
ファイル: TunManager.cpp プロジェクト: superchild/fboss
void TunManager::addRemoveTable(int ifIdx, RouterID rid, bool add) {
  // We just store default routes (one for IPv4 and one for IPv6) in each route
  // table.
  struct {
    struct nlmsghdr n;
    struct rtmsg r;
    char buf[256];
  } req;
  const folly::IPAddress addrs[] = {
    IPAddress{"0.0.0.0"},       // v4 default
    IPAddress{"::0"},           // v6 default
  };

  for (const auto& addr : addrs) {
    memset(&req, 0, sizeof(req));
    req.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct rtmsg));
    req.n.nlmsg_flags = NLM_F_REQUEST;
    if (add) {
      req.n.nlmsg_type = RTM_NEWROUTE;
      req.n.nlmsg_flags |= NLM_F_CREATE|NLM_F_REPLACE;
    } else {
      req.n.nlmsg_type = RTM_DELROUTE;
    }
    req.r.rtm_family = addr.family();
    req.r.rtm_table = getTableId(rid);
    req.r.rtm_scope = RT_SCOPE_NOWHERE;
    req.r.rtm_protocol = RTPROT_FBOSS;
    req.r.rtm_scope = RT_SCOPE_UNIVERSE;
    req.r.rtm_type = RTN_UNICAST;
    req.r.rtm_dst_len = 0;       // default route, /0
    addattr_l(&req.n, sizeof(req), RTA_DST, addr.bytes(), addr.byteCount());
    addattr32(&req.n, sizeof(req), RTA_OIF, ifIdx);
    auto ret = rtnl_talk(&rth_, &req.n, 0, 0, nullptr);
    sysCheckError(ret, "Failed to ", add ? "add" : "remove",
                  " default route ", addr, " @ index ", ifIdx,
                  " in table ", getTableId(rid), " for router ", rid);
    LOG(INFO) << (add ? "Added" : "Removed") << " default route " << addr
              << " @ index " << ifIdx << " in table " << getTableId(rid)
              << " for router " << rid;
  }
}
コード例 #3
0
ファイル: oClub.cpp プロジェクト: ledusledus/meos
void oClub::addTableRow(Table &table) const {
  table.addRow(getTableId(), pClass(this));

  bool dbClub = table.getInternalName() != TB_CLUBS;
  bool canEdit =  dbClub ? !oe->isClient() : true;

  pClub it = pClub(this);
  int row = 0;
  table.set(row++, *it, TID_ID, itos(getId()), false);
  table.set(row++, *it, TID_MODIFIED, getTimeStamp(), false);

  table.set(row++, *it, TID_CLUB, getName(), canEdit);
  row = oe->oClubData->fillTableCol(*this, table, canEdit);

  if (!dbClub) {
    table.set(row++, *it, TID_NUM, itos(tNumRunners), false);
    table.set(row++, *it, TID_FEE, oe->formatCurrency(tFee), false);
    table.set(row++, *it, TID_PAID, oe->formatCurrency(tPaid), false);
  }
}
コード例 #4
0
ファイル: si.c プロジェクト: rofehr/omxhddevice
TableId Section::getTableId() const {
   return getTableId(data.getData());
}
コード例 #5
0
ファイル: Restore.hpp プロジェクト: carrotli/ansql
 Uint32 getTableId() const { 
   return m_dictTable->getTableId(); 
 }
コード例 #6
0
ファイル: section.c プロジェクト: nvertigo/vdr
bool EIT::isActualTS() const {
   return
       (getTableId() ==TableIdEIT_presentFollowing)
    || (TableIdEIT_schedule_first <= getTableId() && getTableId() <= TableIdEIT_schedule_last);
}
コード例 #7
0
ファイル: section.c プロジェクト: nvertigo/vdr
bool EIT::isPresentFollowing() const {
   return getTableId() == TableIdEIT_presentFollowing || getTableId() == TableIdEIT_presentFollowing_other;
}
コード例 #8
0
ファイル: app_ramcloud.c プロジェクト: ctbrowser/wheatserver
int callRamcloud(struct conn *c, void *arg)
{
    enum memcacheCommand command = getMemcacheCommand(c->protocol_data);
    struct RejectRules rule;
    struct ramcloudData *d = c->app_private_data;
    int owner = c->client->owner;
    uint64_t table_id;
    ASSERT(owner);
    if (getTableId(owner, &table_id) < 0) {
        sliceTo(&d->storage_response, (uint8_t*)SERVER_ERROR, sizeof(SERVER_ERROR)-1);
        sendMemcacheResponse(c, &d->storage_response);
        return WHEAT_OK;
    }
    d->table_id = table_id;
    memset(&rule, 0, sizeof(rule));
    switch (command) {
        case REQ_MC_GET:
        case REQ_MC_GETS:
            d->retrievals = arrayCreate(sizeof(wstr), 1);
            d->retrievals_keys = arrayCreate(sizeof(struct slice), 1);
            d->retrievals_vals = arrayCreate(sizeof(struct slice), 1);
            d->retrievals_flags = arrayCreate(FLAG_SIZE, 1);
            d->retrievals_versions = arrayCreate(sizeof(uint64_t), 1);
            arrayEach2(getMemcacheKeys(c->protocol_data), ramcloudRead, d);
            buildRetrievalResponse(d, command == REQ_MC_GETS ? 1 : 0);
            sliceTo(&d->storage_response, (uint8_t*)d->retrieval_response, wstrlen(d->retrieval_response));
            break;

        case REQ_MC_DELETE:
            rule.doesntExist = 1;
            ramcloudDelete(d, getMemcacheKey(c->protocol_data), &rule);
            break;

        case REQ_MC_ADD:
            rule.exists = 1;
            ramcloudSet(d, getMemcacheKey(c->protocol_data), getMemcacheVal(c->protocol_data),
                        getMemcacheValLen(c->protocol_data), getMemcacheFlag(c->protocol_data), &rule);
            break;

        case REQ_MC_REPLACE:
            rule.doesntExist = 1;
            ramcloudSet(d, getMemcacheKey(c->protocol_data), getMemcacheVal(c->protocol_data),
                        getMemcacheValLen(c->protocol_data), getMemcacheFlag(c->protocol_data), &rule);
            break;

        case REQ_MC_CAS:
            rule.givenVersion = getMemcacheCas(c->protocol_data);
            rule.versionNeGiven = 1;
            rule.doesntExist = 1;
            ramcloudSet(d, getMemcacheKey(c->protocol_data), getMemcacheVal(c->protocol_data),
                        getMemcacheValLen(c->protocol_data), getMemcacheFlag(c->protocol_data), &rule);
            break;

        case REQ_MC_SET:
            ramcloudSet(d, getMemcacheKey(c->protocol_data), getMemcacheVal(c->protocol_data),
                        getMemcacheValLen(c->protocol_data), getMemcacheFlag(c->protocol_data), &rule);
            break;

        case REQ_MC_INCR:
            ramcloudIncr(d, getMemcacheKey(c->protocol_data), getMemcacheNum(c->protocol_data), 1);
            break;

        case REQ_MC_DECR:
            ramcloudIncr(d, getMemcacheKey(c->protocol_data), getMemcacheNum(c->protocol_data), 0);
            break;

        case REQ_MC_APPEND:
            ramcloudAppend(d, getMemcacheKey(c->protocol_data), getMemcacheVal(c->protocol_data),
                           getMemcacheValLen(c->protocol_data), getMemcacheFlag(c->protocol_data), 1);
            break;

        case REQ_MC_PREPEND:
            ramcloudAppend(d, getMemcacheKey(c->protocol_data), getMemcacheVal(c->protocol_data),
                           getMemcacheValLen(c->protocol_data), getMemcacheFlag(c->protocol_data), 0);
            break;

        default:
            ASSERT(0);
    }

    sendMemcacheResponse(c, &d->storage_response);

    return WHEAT_OK;
}