【问题标题】:Change IP Address using libnm and glib使用 libnm 和 glib 更改 IP 地址
【发布时间】:2021-02-05 21:30:33
【问题描述】:

我正在尝试使用 libnm 在 C++ 应用程序中更改我的接口的 IP 地址,但我找不到一个很好的例子。现在我能够获取设备处理程序并请求连接。

int main(int argc, char *argv[])
{
    NMClient *       client;
    GError *         error = NULL;
    const GPtrArray *connections;
    int              i;

    if (!(client = nm_client_new(NULL, &error))) 


    if (!nm_client_get_nm_running(client)) {
        g_message("Error: Can't obtain connections: NetworkManager is not running.");
        return EXIT_FAILURE;
    }

    // Find the device
    NMDevice* device = nm_client_get_device_by_iface (client, "eno1");

    NMDeviceState state = nm_device_get_state (device);
    if(state == NM_DEVICE_STATE_ACTIVATED)
    {
        NMActiveConnection* connection = nm_device_get_active_connection(device);
        NMIPConfig * ipConfig = nm_active_connection_get_ip4_config(connection);

        //what now?
    }
    else
    {
        const GPtrArray* availableConnections = nm_device_get_available_connections(device);

        for (i = 0; i < availableConnections->len; i++)
        {
            //How do I iterate through available connections, and how can I add an ip address and activate it?   
        }
    }

    g_object_unref(client);

    return EXIT_SUCCESS;
}

不清楚我可以对连接做什么,我应该如何修改它们(我想设置 dhcp,或者用最少的配置固定 IP 地址),我应该如何激活连接并存储它。 我无法找到一个很好的例子。

【问题讨论】:

    标签: c++ glib networkmanager


    【解决方案1】:

    如果您找到想要激活的配置文件 (NMRemoteConnection),可以使用 nm_client_activate_connection_async() 激活它。

    请参阅 libnm 文档here

    现在,您会注意到 nm_client_activate_connection_async() 只是异步 API。这意味着,要使用它,您必须迭代 GMainContext 直到回调返回。通常,D-Bus 本质上是异步的,因为您来回发送消息。这意味着,在 has problems 之上的同步 API。

    请注意,激活连接回调被调用,设备几乎没有开始激活。您只会得到NMActiveConnection,它是您进行激活的句柄。该设备尚未完全启动。 “完全启动”的含义取决于您如何解释它。一种常见的解释是设备的状态一直进展到NM_DEVICE_STATE_ACTIVATED。如果您想等待,您可以订阅信号并进一步迭代GMainContext,直到激活成功或失败。

    另见what nmcli does

    【讨论】:

      猜你喜欢
      • 2011-06-09
      • 2018-01-18
      • 1970-01-01
      • 2019-01-31
      • 2013-01-26
      • 1970-01-01
      • 1970-01-01
      • 2015-05-05
      • 2017-01-05
      相关资源
      最近更新 更多