X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=folly%2FIPAddressV6.cpp;h=e40a08e5d17e317f43fb6a6056569da41b1511a1;hb=ea815395588bf55ce57f505e05f5df469edf3436;hp=57d00aa4b71f416d25dd8d04cc56ba2fd19dca0a;hpb=f258ec23413c8b75680291ce3bb01fc9fed72fc5;p=folly.git diff --git a/folly/IPAddressV6.cpp b/folly/IPAddressV6.cpp index 57d00aa4..e40a08e5 100644 --- a/folly/IPAddressV6.cpp +++ b/folly/IPAddressV6.cpp @@ -25,6 +25,19 @@ #include #include +#if !_WIN32 +#include +#else +// Because of the massive pain that is libnl, this can't go into the socket +// portability header as you can't include and in +// the same translation unit without getting errors -_-... +#include +#include + +// Alias the max size of an interface name to what posix expects. +#define IFNAMSIZ IF_NAMESIZE +#endif + using std::ostream; using std::string; @@ -188,8 +201,8 @@ IPAddressV6 IPAddressV6::fromInverseArpaName(const std::string& arpaname) { std::array ip; size_t pos = 0; int count = 0; - for (int p = pieces.size() - 1; p >= 0; p--) { - ip[pos] = pieces[p][0]; + for (size_t i = 1; i <= pieces.size(); i++) { + ip[pos] = pieces[pieces.size() - i][0]; pos++; count++; // add ':' every 4 chars @@ -403,21 +416,33 @@ IPAddressV6 IPAddressV6::mask(size_t numBits) const { // public string IPAddressV6::str() const { - char buffer[INET6_ADDRSTRLEN] = {0}; - sockaddr_in6 sock = toSockAddr(); - if (!getnameinfo( - (sockaddr*)&sock, sizeof(sock), - buffer, INET6_ADDRSTRLEN, - nullptr, 0, NI_NUMERICHOST)) { - string ip(buffer); - return ip; - } else { + char buffer[INET6_ADDRSTRLEN + IFNAMSIZ + 1]; + + if (!inet_ntop(AF_INET6, toAddr().s6_addr, buffer, INET6_ADDRSTRLEN)) { throw IPAddressFormatException(to( "Invalid address with hex ", "'", detail::Bytes::toHex(bytes(), 16), - "'")); + "'", + " with error ", + strerror(errno))); + } + + auto scopeId = getScopeId(); + if (scopeId != 0) { + auto len = strlen(buffer); + buffer[len] = '%'; + + auto errsv = errno; + if (!if_indextoname(scopeId, buffer + len + 1)) { + // if we can't map the if because eg. it no longer exists, + // append the if index instead + snprintf(buffer + len + 1, IFNAMSIZ, "%u", scopeId); + } + errno = errsv; } + + return string(buffer); } // public @@ -425,6 +450,11 @@ string IPAddressV6::toFullyQualified() const { return detail::fastIpv6ToString(addr_.in6Addr_); } +// public +void IPAddressV6::toFullyQualifiedAppend(std::string& out) const { + detail::fastIpv6AppendToString(addr_.in6Addr_, out); +} + // public string IPAddressV6::toInverseArpaName() const { constexpr folly::StringPiece lut = "0123456789abcdef"; @@ -455,8 +485,18 @@ const ByteArray16 IPAddressV6::fetchMask(size_t numBits) { if (numBits > bits) { throw IPAddressFormatException("IPv6 addresses are 128 bits."); } - // masks_ is backed by an array so is zero indexed - return masks_[numBits]; + if (numBits == 0) { + return {{0}}; + } + constexpr auto _0s = uint64_t(0); + constexpr auto _1s = ~_0s; + auto const fragment = Endian::big(_1s << ((128 - numBits) % 64)); + auto const hi = numBits <= 64 ? fragment : _1s; + auto const lo = numBits <= 64 ? _0s : fragment; + uint64_t const parts[] = {hi, lo}; + ByteArray16 arr; + std::memcpy(arr.data(), parts, sizeof(parts)); + return arr; } // public static @@ -474,525 +514,4 @@ bool IPAddressV6::inBinarySubnet(const std::array addr, auto masked = mask(numBits); return (std::memcmp(addr.data(), masked.bytes(), 2) == 0); } - -// static private -const std::array IPAddressV6::masks_ = {{ -/* /0 */ {{ 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /1 */ {{ 0x80,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /2 */ {{ 0xc0,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /3 */ {{ 0xe0,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /4 */ {{ 0xf0,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /5 */ {{ 0xf8,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /6 */ {{ 0xfc,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /7 */ {{ 0xfe,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /8 */ {{ 0xff,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /9 */ {{ 0xff,0x80,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /10 */ {{ 0xff,0xc0,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /11 */ {{ 0xff,0xe0,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /12 */ {{ 0xff,0xf0,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /13 */ {{ 0xff,0xf8,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /14 */ {{ 0xff,0xfc,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /15 */ {{ 0xff,0xfe,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /16 */ {{ 0xff,0xff,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /17 */ {{ 0xff,0xff,0x80,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /18 */ {{ 0xff,0xff,0xc0,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /19 */ {{ 0xff,0xff,0xe0,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /20 */ {{ 0xff,0xff,0xf0,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /21 */ {{ 0xff,0xff,0xf8,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /22 */ {{ 0xff,0xff,0xfc,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /23 */ {{ 0xff,0xff,0xfe,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /24 */ {{ 0xff,0xff,0xff,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /25 */ {{ 0xff,0xff,0xff,0x80, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /26 */ {{ 0xff,0xff,0xff,0xc0, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /27 */ {{ 0xff,0xff,0xff,0xe0, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /28 */ {{ 0xff,0xff,0xff,0xf0, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /29 */ {{ 0xff,0xff,0xff,0xf8, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /30 */ {{ 0xff,0xff,0xff,0xfc, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /31 */ {{ 0xff,0xff,0xff,0xfe, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /32 */ {{ 0xff,0xff,0xff,0xff, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /33 */ {{ 0xff,0xff,0xff,0xff, - 0x80,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /34 */ {{ 0xff,0xff,0xff,0xff, - 0xc0,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /35 */ {{ 0xff,0xff,0xff,0xff, - 0xe0,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /36 */ {{ 0xff,0xff,0xff,0xff, - 0xf0,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /37 */ {{ 0xff,0xff,0xff,0xff, - 0xf8,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /38 */ {{ 0xff,0xff,0xff,0xff, - 0xfc,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /39 */ {{ 0xff,0xff,0xff,0xff, - 0xfe,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /40 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /41 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0x80,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /42 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xc0,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /43 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xe0,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /44 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xf0,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /45 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xf8,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /46 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xfc,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /47 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xfe,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /48 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /49 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0x80,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /50 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xc0,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /51 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xe0,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /52 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xf0,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /53 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xf8,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /54 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xfc,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /55 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xfe,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /56 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x00, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /57 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x80, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /58 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xc0, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /59 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xe0, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /60 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xf0, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /61 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xf8, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /62 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xfc, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /63 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xfe, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /64 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /65 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0x80,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /66 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xc0,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /67 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xe0,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /68 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xf0,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /69 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xf8,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /70 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xfc,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /71 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xfe,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /72 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /73 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0x80,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /74 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xc0,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /75 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xe0,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /76 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xf0,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /77 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xf8,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /78 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xfc,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /79 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xfe,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /80 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0x00,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /81 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0x80,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /82 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xc0,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /83 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xe0,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /84 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xf0,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /85 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xf8,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /86 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xfc,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /87 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xfe,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /88 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x00, - 0x00,0x00,0x00,0x00 }}, -/* /89 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x80, - 0x00,0x00,0x00,0x00 }}, -/* /90 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xc0, - 0x00,0x00,0x00,0x00 }}, -/* /91 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xe0, - 0x00,0x00,0x00,0x00 }}, -/* /92 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xf0, - 0x00,0x00,0x00,0x00 }}, -/* /93 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xf8, - 0x00,0x00,0x00,0x00 }}, -/* /94 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xfc, - 0x00,0x00,0x00,0x00 }}, -/* /95 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xfe, - 0x00,0x00,0x00,0x00 }}, -/* /96 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0x00,0x00,0x00,0x00 }}, -/* /97 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0x80,0x00,0x00,0x00 }}, -/* /98 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xc0,0x00,0x00,0x00 }}, -/* /99 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xe0,0x00,0x00,0x00 }}, -/* /100 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xf0,0x00,0x00,0x00 }}, -/* /101 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xf8,0x00,0x00,0x00 }}, -/* /102 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xfc,0x00,0x00,0x00 }}, -/* /103 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xfe,0x00,0x00,0x00 }}, -/* /104 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0x00,0x00,0x00 }}, -/* /105 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0x80,0x00,0x00 }}, -/* /106 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xc0,0x00,0x00 }}, -/* /107 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xe0,0x00,0x00 }}, -/* /108 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xf0,0x00,0x00 }}, -/* /109 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xf8,0x00,0x00 }}, -/* /110 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xfc,0x00,0x00 }}, -/* /111 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xfe,0x00,0x00 }}, -/* /112 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0x00,0x00 }}, -/* /113 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0x80,0x00 }}, -/* /114 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xc0,0x00 }}, -/* /115 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xe0,0x00 }}, -/* /116 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xf0,0x00 }}, -/* /117 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xf8,0x00 }}, -/* /118 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xfc,0x00 }}, -/* /119 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xfe,0x00 }}, -/* /120 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x00 }}, -/* /121 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x80 }}, -/* /122 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xc0 }}, -/* /123 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xe0 }}, -/* /124 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xf0 }}, -/* /125 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xf8 }}, -/* /126 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xfc }}, -/* /127 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xfe }}, -/* /128 */ {{ 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff }}, -}}; - -} // folly +} // namespace folly