Changeset 58827 in vbox
- Timestamp:
- Nov 23, 2015 4:31:48 PM (9 years ago)
- Location:
- trunk/src/VBox/Main
- Files:
-
- 2 edited
-
include/NATNetworkImpl.h (modified) (1 diff)
-
src-server/NATNetworkImpl.cpp (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Main/include/NATNetworkImpl.h
r50174 r58827 114 114 int i_recalculateIpv4AddressAssignments(); 115 115 int i_findFirstAvailableOffset(ADDRESSLOOKUPTYPE, uint32_t *); 116 int i_recalculateIPv6Prefix(); 116 117 117 118 typedef std::map<Utf8Str, settings::NATRule> NATRuleMap; -
trunk/src/VBox/Main/src-server/NATNetworkImpl.cpp
r54705 r58827 140 140 m->offGateway = 1; 141 141 m->IPv4NetworkCidr = "10.0.2.0/24"; 142 m->IPv6Prefix = "fe80::/64";142 i_recalculateIPv6Prefix(); /* set m->IPv6Prefix based on IPv4 */ 143 143 144 144 settings::NATHostLoopbackOffset off; … … 179 179 m->fNeedDhcpServer = data.fNeedDhcpServer; 180 180 m->fIPv6Enabled = data.fIPv6; 181 182 if ( data.strIPv6Prefix.isEmpty() 183 /* also clean up bogus old default */ 184 || data.strIPv6Prefix == "fe80::/64") 185 i_recalculateIPv6Prefix(); /* set m->IPv6Prefix based on IPv4 */ 186 else 187 m->IPv6Prefix = data.strIPv6Prefix; 181 188 182 189 m->u32LoopbackIp6 = data.u32HostLoopback6Offset; … … 958 965 return VINF_SUCCESS; 959 966 } 967 968 969 int NATNetwork::i_recalculateIPv6Prefix() 970 { 971 int rc; 972 973 RTNETADDRIPV4 net, mask; 974 rc = RTCidrStrToIPv4(Utf8Str(m->IPv4NetworkCidr).c_str(), &net, &mask); 975 if (RT_FAILURE(rc)) 976 return rc; 977 978 net.u = RT_H2N_U32(net.u); /* XXX: fix RTCidrStrToIPv4! */ 979 980 /* 981 * [fd17:625c:f037:XXXX::/64] - RFC 4193 (ULA) Locally Assigned 982 * Global ID where XXXX, 16 bit Subnet ID, are two bytes from the 983 * middle of the IPv4 address, e.g. :dead: for 10.222.173.1 984 */ 985 RTNETADDRIPV6 prefix; 986 RT_ZERO(prefix); 987 988 prefix.au8[0] = 0xFD; 989 prefix.au8[1] = 0x17; 990 991 prefix.au8[2] = 0x62; 992 prefix.au8[3] = 0x5C; 993 994 prefix.au8[4] = 0xF0; 995 prefix.au8[5] = 0x37; 996 997 prefix.au8[6] = net.au8[1]; 998 prefix.au8[7] = net.au8[2]; 999 1000 char szBuf[32]; 1001 RTStrPrintf(szBuf, sizeof(szBuf), "%RTnaipv6/64", &prefix); 1002 1003 m->IPv6Prefix = szBuf; 1004 return VINF_SUCCESS; 1005 }
Note:
See TracChangeset
for help on using the changeset viewer.

