UDS transport is configured using pmc_common functions. Signed-off-by: Anders Selhammer <anders.selham...@est.tech> --- makefile | 3 +- snmpd.c | 102 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 102 insertions(+), 3 deletions(-)
diff --git a/makefile b/makefile index ed5c554..fdf3747 100644 --- a/makefile +++ b/makefile @@ -52,7 +52,8 @@ ptp4l: $(OBJ) nsm: config.o filter.o hash.o mave.o mmedian.o msg.o nsm.o print.o raw.o \ rtnl.o sk.o transport.o tlv.o tsproc.o udp.o udp6.o uds.o util.o version.o -snmpd: print.o sk.o snmpd.o util.o +snmpd: config.o hash.o msg.o pmc_common.o print.o raw.o sk.o \ + snmpd.o tlv.o transport.o udp.o udp6.o uds.o util.o pmc: config.o hash.o msg.o pmc.o pmc_common.o print.o raw.o sk.o tlv.o \ transport.o udp.o udp6.o uds.o util.o version.o diff --git a/snmpd.c b/snmpd.c index 32237a5..1718b07 100644 --- a/snmpd.c +++ b/snmpd.c @@ -21,8 +21,26 @@ #include <net-snmp/net-snmp-includes.h> #include <net-snmp/agent/net-snmp-agent-includes.h> +#include "config.h" +#include "pmc_common.h" +#include "print.h" #include "util.h" +static struct pmc *pmc; + +static int open_pmc(struct config *cfg) +{ + char uds_local[MAX_IFNAME_SIZE + 1]; + snprintf(uds_local, sizeof(uds_local), "/var/run/snmpd.%d", getpid()); + + pmc = pmc_create(cfg, TRANS_UDS, uds_local, 0, + config_get_int(cfg, NULL, "domainNumber"), + config_get_int(cfg, NULL, "transportSpecific") << 4, + 1); + + return pmc ? 0 : -1; +} + static int open_snmp() { snmp_enable_calllog(); @@ -35,23 +53,103 @@ static int open_snmp() return 0; } +static void usage(char *progname) +{ + fprintf(stderr, + "\nusage: %s [options]\n\n" + " -f [file] read configuration from 'file'\n" + " -h prints this message and exits\n" + " -m print messages to stdout\n" + " -q do not print messages to the syslog\n" + "\n", + progname); +} + int main(int argc, char *argv[]) { - int err = 0; + char *config = NULL, *progname; + int c, err = 0, index; + struct option *opts; + struct config *cfg; if (handle_term_signals()) { return -1; } - if (open_snmp()) { + cfg = config_create(); + if (!cfg) { return -1; } + opts = config_long_options(cfg); + print_set_verbose(1); + print_set_syslog(0); + + /* Process the command line arguments. */ + progname = strrchr(argv[0], '/'); + progname = progname ? 1+progname : argv[0]; + while (EOF != (c = getopt_long(argc, argv, "f:hmq", opts, &index))) { + switch (c) { + case 0: + if (config_parse_option(cfg, opts[index].name, optarg)) { + config_destroy(cfg); + return -1; + } + break; + case 'f': + config = optarg; + break; + case 'h': + usage(progname); + err = -1; + goto out; + case 'm': + config_set_int(cfg, "verbose", 1); + break; + case 'q': + config_set_int(cfg, "use_syslog", 0); + break; + case '?': + default: + usage(progname); + err = -1; + goto out; + } + } + + if (config && (err = config_read(config, cfg))) { + err = -1; + goto out; + } + + print_set_progname(progname); + print_set_tag(config_get_string(cfg, NULL, "message_tag")); + print_set_verbose(config_get_int(cfg, NULL, "verbose")); + print_set_syslog(config_get_int(cfg, NULL, "use_syslog")); + print_set_level(config_get_int(cfg, NULL, "logging_level")); + + + if (open_pmc(cfg)) { + err = -1; + goto pmc_out; + } + + if (open_snmp()) { + err = -1; + goto snmp_out; + } + while (is_running()) { agent_check_and_process(1); } snmp_shutdown("linuxptpAgent"); +snmp_out: + pmc_destroy(pmc); + msg_cleanup(); +pmc_out: +out: + config_destroy(cfg); return err; } -- 1.8.3.1 --- This email has been checked for viruses by Avast antivirus software. https://www.avast.com/antivirus ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Linuxptp-devel mailing list Linuxptp-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxptp-devel