evgeny 2 months ago
parent
commit
ff84d0d986
  1. 1
      src/chat/chat_core_priv.h
  2. 1
      src/routing_layer/route_lib.c
  3. 2
      src/routing_layer/route_lib.h
  4. 2
      src/routing_layer/route_lib_doc.md

1
src/chat/chat_core_priv.h

@ -85,6 +85,7 @@ static inline int addr_type_from_ip(int family, const uint8_t* addr) {
if (b0 == 169 && b1 == 254) return ADDR_TYPE_NETIF;
if (b0 >= 224 && b0 <= 239) return ADDR_TYPE_NETIF;
if (b0 == 172 && b1 >= 16 && b1 <= 31) return ADDR_TYPE_NETIF;
if (b0 == 100 && b1 >= 64 && b1 <= 127) return ADDR_TYPE_NETIF; /* 100.64.0.0/10 (CGNAT) */
if (b0 == 192 && b1 == 168) return ADDR_TYPE_NETIF;
{ uint32_t ip; memcpy(&ip, addr, 4); if (ip == 0 || ip == 0xffffffff) return ADDR_TYPE_NETIF; }
return ADDR_TYPE_DIRECT;

1
src/routing_layer/route_lib.c

@ -279,6 +279,7 @@ int is_local_subnet(uint32_t ip) {
if (first_octet == 169 && second_octet == 254) return 1;
if (first_octet >= 224 && first_octet <= 239) return 1;
if (first_octet == 172 && second_octet >= 16 && second_octet <= 31) return 1;
if (first_octet == 100 && second_octet >= 64 && second_octet <= 127) return 1; /* 100.64.0.0/10 (CGNAT) */
if (first_octet == 192 && second_octet == 168) return 1;
if (ip==0xffffffff) return 1;
DEBUG_TRACE(DEBUG_CATEGORY_BGP, "result: global ip %d.%d : ", first_octet, second_octet);

2
src/routing_layer/route_lib.h

@ -122,7 +122,7 @@ bool route_add_local_subnet(struct ROUTE_TABLE *table, uint32_t network, uint8_t
* @brief Проверяет что IP адрес НЕ является публичным (роутится в интернете)
*
* @param ip IP адрес в сетевом порядке (big-endian)
* @return 0 - публичный (роутится в интернете), 1 - локальный/мультикастовый/зарезервированный
* @return 0 - публичный (роутится в интернете), 1 - локальный/CGNAT/мультикастовый/зарезервированный
*/
int is_local_subnet(uint32_t ip);

2
src/routing_layer/route_lib_doc.md

@ -54,7 +54,7 @@ route_table_destroy(rt);
| `route_lookup(table, dest_ip)` | LPM-поиск. Возвращает `ROUTE_ENTRY*` или NULL. Инкрементит `stats` (hits/misses) |
| `route_table_print(table)` | Печатает содержимое таблицы в лог |
| `parse_subnet(str, network, prefix_length)` | Парсит `"a.b.c.d/n"` → network (BE) + prefix_length. Возвращает 0/-1 |
| `is_local_subnet(ip)` | Проверяет, является ли IP локальным/мультикастовым/зарезервированным (0=true). RFC1918 + 0.0.0.0/8 + 127.0.0.0/8 + АPIPA + multicast + broadcast |
| `is_local_subnet(ip)` | Проверяет, является ли IP локальным/мультикастовым/зарезервированным (0=true). RFC1918 + 0.0.0.0/8 + 127.0.0.0/8 + АPIPA + multicast + broadcast + CGNAT (100.64.0.0/10) |
| `route_add_local_subnet(table, network, prefix_length)` | **Объявлена в .h, но не реализована** |
### Внутренние функции

Loading…
Cancel
Save