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; }
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; } }
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); } }
TableId Section::getTableId() const { return getTableId(data.getData()); }
Uint32 getTableId() const { return m_dictTable->getTableId(); }
bool EIT::isActualTS() const { return (getTableId() ==TableIdEIT_presentFollowing) || (TableIdEIT_schedule_first <= getTableId() && getTableId() <= TableIdEIT_schedule_last); }
bool EIT::isPresentFollowing() const { return getTableId() == TableIdEIT_presentFollowing || getTableId() == TableIdEIT_presentFollowing_other; }
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; }