> I have started working on CR 6745288. This CR enhances libdladm by
> allowing users of libdladm to create handles and pass to libdladm
> function. This reduces the number of open(DLD_CONTROL_DEV) calls.
>
> I have started out with the following structure for the handle:
>
> struct dladm_handle {
> int dld_fd; /* file handle for DLD_CONTROL_DEV */
> datalink_id_t dld_linkid;
> char dld_linkname[MAXLINKNAMELEN];
> };
>
> I've noticed that there are a lot of calls to dladm_name2info() and
> dladm_datalink_id2info(), both of which return the flags, class, and
> media associated with the link.
Before going too far with handles, I think it's important to step back and
look at the semantics needed by libdladm consumers. In this case, do
consumers usually do things repeatedly on a single link, or do they
iterate over a set of links? (Or is this merely a cache? If so, how is
the cache kept current?)
More generally, the priority should be simplifying libdladm callers (with
the implementation of libdladm itself a distant secondary concern). For
instance, ideally, dladm should be a trivial wrapper around libdladm that
parses its input arguments to build the arguments to pass to a few
libdladm functions, then outputs appropriate error messages. Right now it
has a whole bunch of other stuff which suggests that the library/command
split is in the wrong place.
--
meem