#include <zephyr/kernel.h>
#include <zephyr/net/net_if.h>
#include <zephyr/net/net_core.h>
#include <zephyr/net/net_ip.h>
void set_static_ip(void)
{
// 1. Получаем указатель на сетевой интерфейс по умолчанию (Ethernet-порт i.MX RT)
struct net_if *iface = net_if_get_default();
if (!iface) {
printk("Ошибка: Сетевой интерфейс не найден\n");
return;
}
struct in_addr ipaddr, netmask, gw;
// 2. Преобразуем строковые IP-адреса в бинарную структуру структур
net_addr_pton(AF_INET, "192.168.1.100", &ipaddr);
net_addr_pton(AF_INET, "255.255.255.0", &netmask);
net_addr_pton(AF_INET, "192.168.1.1", &gw);
// 3. Удаляем старые IPv4 адреса, если они были (например, от DHCP)
// Это предотвратит конфликты нескольких адресов на одном интерфейсе
net_if_ipv4_addr_rm(iface, &iface->config.ip.ipv4->unicast[0].ipv4.address.in_addr);
// 4. Добавляем новый статический IP-адрес
struct net_if_addr *if_addr = net_if_ipv4_addr_add(iface, &ipaddr, NET_ADDR_MANUAL, 0);
if (!if_addr) {
printk("Ошибка: Не удалось добавить IP-адрес\n");
return;
}
// 5. Устанавливаем маску подсети и шлюз по умолчанию
net_if_ipv4_set_netmask_by_addr(iface, &ipaddr, &netmask);
net_if_ipv4_set_gw(iface, &gw);
printk("Статический IP успешно установлен: 192.168.1.100\n");
}
int main(void)
{
// Даем время стеку сети инициализироваться
k_sleep(K_MSEC(1000));
set_static_ip();
return 0;
}