Blame examples/lua/lgi/add-connection.lua

Packit Service b23acc
#!/usr/bin/env lua
Packit Service b23acc
-- SPDX-License-Identifier: GPL-2.0+
Packit Service b23acc
--
Packit Service b23acc
-- Copyright (C) 2015 Red Hat, Inc.
Packit Service b23acc
--
Packit Service b23acc
Packit Service b23acc
-- Adding an Ethernet connection to NetworkManager in Lua.
Packit Service b23acc
-- The example uses libnm library using GObject introspection via Lua lgi module.
Packit Service b23acc
-- Most distribution ship the module as lua-lgi package.
Packit Service b23acc
-- libnm guide:   https://developer.gnome.org/libnm/1.0/
Packit Service b23acc
-- Lua-lgi guide: https://github.com/pavouk/lgi/blob/master/docs/guide.md
Packit Service b23acc
Packit Service b23acc
local lgi = require 'lgi'
Packit Service b23acc
local GLib = lgi.GLib
Packit Service b23acc
local NM = lgi.NM
Packit Service b23acc
Packit Service b23acc
function uuid()
Packit Service b23acc
  math.randomseed(os.time())
Packit Service b23acc
  local template ='xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'
Packit Service b23acc
  local uuid = string.gsub(template, '[xy]', function (c)
Packit Service b23acc
    local v = (c == 'x') and math.random(0, 0xf) or math.random(8, 0xb)
Packit Service b23acc
    return string.format('%x', v)
Packit Service b23acc
  end)
Packit Service b23acc
  return uuid
Packit Service b23acc
end
Packit Service b23acc
Packit Service b23acc
-- function creating NMConnection
Packit Service b23acc
function create_profile(name)
Packit Service b23acc
  profile = NM.SimpleConnection.new()
Packit Service b23acc
Packit Service b23acc
  s_con = NM.SettingConnection.new()
Packit Service b23acc
  s_wired = NM.SettingWired.new()
Packit Service b23acc
  s_con[NM.SETTING_CONNECTION_ID] = name
Packit Service b23acc
  s_con[NM.SETTING_CONNECTION_UUID] = uuid()
Packit Service b23acc
  s_con[NM.SETTING_CONNECTION_TYPE] = "802-3-ethernet"
Packit Service b23acc
Packit Service b23acc
  profile:add_setting(s_con)
Packit Service b23acc
  profile:add_setting(s_wired)
Packit Service b23acc
Packit Service b23acc
  -- show the connection
Packit Service b23acc
  -- profile:dump()
Packit Service b23acc
  return profile
Packit Service b23acc
end
Packit Service b23acc
Packit Service b23acc
-- callback function for add_connection_async()
Packit Service b23acc
function added_cb(client, result, data)
Packit Service b23acc
  local con,err,code = client:add_connection_finish(result)
Packit Service b23acc
  if con then
Packit Service b23acc
    print("The connection profile has been successfully added to NetworkManager:")
Packit Service b23acc
    print(con:get_id(), con:get_uuid())
Packit Service b23acc
  else
Packit Service b23acc
    print(string.format("Error: (%d) %s", code, err))
Packit Service b23acc
  end
Packit Service b23acc
  main_loop:quit() -- exit now
Packit Service b23acc
end
Packit Service b23acc
Packit Service b23acc
Packit Service b23acc
---------------------------
Packit Service b23acc
-- Main code starts here --
Packit Service b23acc
---------------------------
Packit Service b23acc
-- parse command-line arguments
Packit Service b23acc
local name, persist = ...
Packit Service b23acc
if (not name or (persist and not string.find("persistent", persist, 1))) then
Packit Service b23acc
  print(string.format("Usage: %s <connection name> [persistent]", arg[0]:gsub(".*/","")))
Packit Service b23acc
  os.exit(1)
Packit Service b23acc
end
Packit Service b23acc
Packit Service b23acc
-- create GLib main loop
Packit Service b23acc
main_loop = GLib.MainLoop(nil, false)
Packit Service b23acc
Packit Service b23acc
-- create Client object
Packit Service b23acc
local client = NM.Client.new()
Packit Service b23acc
Packit Service b23acc
-- create a connection profile
Packit Service b23acc
local con = create_profile(name)
Packit Service b23acc
Packit Service b23acc
-- send the connection to NetworkManager
Packit Service b23acc
client:add_connection_async(con, persist, nil, added_cb, nil)
Packit Service b23acc
Packit Service b23acc
-- run main loop so that the callback could be called
Packit Service b23acc
main_loop:run()
Packit Service b23acc