Page MenuHomeFreeBSD

libucl-based configuration file parser for ctld
ClosedPublic

Authored by jceel on Dec 12 2015, 3:33 PM.

Details

Summary

This change adds additional, libucl-based configuration file parser to ctld. Parsing ctl.conf (or configuration file specified with -f) as an UCL file is enabled using -u command-line switch.

Test Plan

Example config file (which is actually in JSON format, fully compatible with UCL):

{
    "target": {
        "naa.5000c50006815e48": {
            "port": "camsim",
            "lun": [
                {
                    "number": 0,
                    "name": "disk1"
                },
                {
                    "number": 1,
                    "name": "disk3"
                },
                {
                    "number": 2,
                    "name": "disk4"
                }
            ]
        }
    },
    "lun": {
        "disk1": {
            "serial": "00505625139600",
            "blocksize": 512,
            "options": {
                "removable": "on",
                "product": "Virtual Disk",
                "vendor": "FreeNAS",
                "device-id": "Virtual Disk 00505625139600",
                "rpm": "7200",
                "naa": "0x6589cfc000000572122b119a12bbdac3"
            },
            "path": "/var/db/system/simulator/disk1"
        },
        "disk3": {
            "serial": "00505625139600",
            "blocksize": 512,
            "options": {
                "removable": "on",
                "product": "Virtual Disk",
                "vendor": "FreeNAS",
                "device-id": "Virtual Disk 00505625139600",
                "rpm": "7200",
                "naa": "0x6589cfc000000446222150ce63317d41"
            },
            "path": "/var/db/system/simulator/disk3"
        },
        "disk4": {
            "serial": "00505625139600",
            "blocksize": 512,
            "options": {
                "removable": "on",
                "product": "Virtual Disk",
                "vendor": "FreeNAS",
                "device-id": "Virtual Disk 00505625139600",
                "rpm": "7200",
                "naa": "0x6589cfc000000e7f80ec91885d4d80b9"
            },
            "path": "/var/db/system/simulator/disk4"
        },
        "disk2": {
            "serial": "00505625139600",
            "blocksize": 512,
            "options": {
                "removable": "on",
                "product": "Virtual Disk",
                "vendor": "FreeNAS",
                "device-id": "Virtual Disk 00505625139600",
                "rpm": "7200",
                "naa": "0x6589cfc000000ee13371ddb41ec93d01"
            },
            "path": "/var/db/system/simulator/disk2"
        }
    }
}

Diff Detail

Repository
rS FreeBSD src repository
Lint
Automatic diff as part of commit; lint not applicable.
Unit
Automatic diff as part of commit; unit tests not applicable.

Event Timeline

jceel updated this revision to Diff 11176.Dec 12 2015, 3:33 PM
jceel retitled this revision from to libucl-based configuration file parser for ctld.
jceel updated this object.
jceel edited the test plan for this revision. (Show Details)
jceel added a reviewer: trasz.
jceel set the repository for this revision to rS FreeBSD src repository.
jceel added a reviewer: mav.Dec 12 2015, 4:22 PM
jceel updated this revision to Diff 11185.Dec 12 2015, 9:14 PM

Initialize "tag" variable to NULL explicitly at uclparse.c:134.

trasz added inline comments.Dec 21 2015, 10:23 PM
usr.sbin/ctld/Makefile
5 ↗(On Diff #11185)

This kind of looks like like it should be handled by LIBADD=ucl. Isn't it?

usr.sbin/ctld/ctld.c
2553 ↗(On Diff #11185)

I liked the old order, ie check_perms after parse_conf/uclparse_conf. This way you would get an user-friendly error with path, if the configuration file doesn't exist.

2556 ↗(On Diff #11185)

style(9) - superfluous "{}" bracees.

usr.sbin/ctld/uclparse.c
227 ↗(On Diff #11185)

s/parse_toplevel/uclparse_toplevel/ ?

471 ↗(On Diff #11185)

Empty line.

659 ↗(On Diff #11185)

Unneeded braces.

692 ↗(On Diff #11185)

Braces.

jceel updated this revision to Diff 12719.Jan 26 2016, 12:44 PM
jceel removed rS FreeBSD src repository as the repository for this revision.

Style fixes; moved check_perms() after parse_conf()/uclparse_conf().

jceel set the repository for this revision to rS FreeBSD src repository.Jan 26 2016, 12:45 PM
trasz accepted this revision.Jan 26 2016, 4:46 PM
trasz edited edge metadata.
This revision is now accepted and ready to land.Jan 26 2016, 4:46 PM
This revision was automatically updated to reflect the committed changes.