Sean Hefty [Mon, 24 Mar 2014 05:27:28 +0000 (22:27 -0700)]
ibacm: Add basic provider framework
Define the provider interface for handling path record query
and route resolution requests. This will define the boundary
between the provider and the core layer.
Update the core functions to invoke the provider interfaces
used for processing client requests.
Sean Hefty [Mon, 24 Mar 2014 06:24:54 +0000 (23:24 -0700)]
ibacm: Define provider endpoint identifier
Introduce a header file that will be included by providers that
will define the interface between the ibacm core layer and the
providers.
Define an endpoint identifier that is associated with a set of
addresses. Providers will be given this structure in requests.
The endpoint is defined as a <device, port, pkey> tuple, though
it may be used with "any" values in order to identify any
port on a device and/or any pkey on a port.
Sean Hefty [Mon, 24 Mar 2014 05:11:58 +0000 (22:11 -0700)]
ibacm: Change client parameter to req id in resp calls
The ibacm core will manage the client connection. Providers
should not interact with clients directly. Instead, the core
will give providers a request id with each request that will be
returned to the core layer when the request has completed.
Change the client field in struct acm_request to an id field,
and update the provider identified functions to use the id
in place of accesing the client directly.
Sean Hefty [Mon, 24 Mar 2014 04:49:13 +0000 (21:49 -0700)]
ibacm: Rename data structures
Provider support will require separate definitions for the
device, port, and endpoint structures between the acm
core and the existing provider. The current struct
acm_port and struct acm_ep contain fields that are
mainly used by what will become the provider. Rename
these structures to have an acmp prefix to indicate
that the provider will own their use.
Sean Hefty [Mon, 24 Mar 2014 01:19:29 +0000 (18:19 -0700)]
ibacm: Function renames
Supporting providers will require existing functionality
to become part of the acm core function or a provider
operation.
Any functionality that will migrate into the provider code
is renamed with the 'acmp' prefix. A couple of core
functions are also renamed to indicate that they will
become callback handlers and exposed directly to the
providers.
Sean Hefty [Wed, 9 Apr 2014 19:04:19 +0000 (12:04 -0700)]
ibacm: Fix invalid memory dereference in acm_process_join_resp
If a join request fails, the dest pointer may not be initialized.
This can result in the ibacm daemon crashing. Fix the crash and
ensure that the multicast state is set correctly in case the
join fails by initializing the state to ACM_INIT before sending
the join request.
Problem reported by: Kaike Wan <kaike.wan@intel.com>
Sean Hefty [Fri, 21 Mar 2014 06:23:06 +0000 (23:23 -0700)]
ibacm: Reset endpoint state on error
An endpoint will be set to the ACM_READY state after
joining its multicast group. If we later receive a
reregister event or port down followed by port up and
try to join the group again but fail, we will leave the
endpoint state as READY, rather than reset it back to INIT.
To fix, always set the mc_dest state to ACM_INIT on
any failure.
Sean Hefty [Fri, 21 Mar 2014 03:59:58 +0000 (20:59 -0700)]
ibacm: Change base endpoint name
Endpoints are given a string identifer (base name) that matches
the first address assigned to the endpoint. Store the endpoint
string identifier separately from the address name, and identify
the endpoint using the device name, port, and pkey.
The endpoint identifier is only used for logging purposes.
Sean Hefty [Wed, 19 Mar 2014 22:45:48 +0000 (15:45 -0700)]
ibacm: Record index for source and destination addresses
When processing a resolve route message, record what
index the source and destination addresses were located
at directly into the message. This replaces returning
pointers to the source and destination address that must
then be passed around.
When provider plug-in support is added in subsequent
patches, this will avoid pointer exchanges between the
core and provider code.
Fix a minor issue where the src_out field may be
uninitialized (value read from client message). Src_out
now becomes a boolean value, rather than an index. The
actual location for the output is specified as an index.
This change cleanups the call to acm_svr_select_src,
which selects a source address. It is only called when
a source is needed, which is explicitly determined by
seeing if src_out is set, rather than relying on a zero
src type field.
Sean Hefty [Thu, 20 Mar 2014 05:14:31 +0000 (22:14 -0700)]
ibacm: Relocate client refcnt
Adjust when we take a reference on the client connection.
Increment the client reference when we begin processing
the client's request, and release it when the response
has been sent.
The client reference will no longer be associated with the
lifetime of any underlying acm_request structure. This change
will allow the acm core to control the client reference
count when we move to a provider plug-in model in subsequent
patches.
Ira Weiny [Tue, 25 Mar 2014 03:17:37 +0000 (23:17 -0400)]
ibacm: Move calling of helper functions out of get_devaddr
Again this is in prep for sharing this code with ibacm and ib_acme
get_devaddr uses globals which are specific to ib_acme. Move toward this
function being ib_acme specific while the code in get_addr_ip becomes generic.
Signed-off-by: Ira Weiny <ira.weiny@intel.com> Signed-off-by: Sean Hefty <sean.hefty@intel.com>
Hal Rosenstock [Thu, 1 Aug 2013 21:10:00 +0000 (14:10 -0700)]
acm: Save endpoint pkey in host order
acm_ep stores and uses a pkey value, assuming that it is in
host order. However, ibv_query_pkey returns the pkey in network
order. We need to byte swap the pkey when saving it.
Signed-off-by: Hal Rosenstock <hal@mellanox.com> Signed-off-by: Sean Hefty <sean.hefty@intel.com>
Hal Rosenstock [Thu, 27 Jun 2013 18:48:11 +0000 (21:48 +0300)]
Add support for preloading IPv4 and IPv6 ACM caches
A hosts file (ibacm_hosts.cfg) is configured with tuples of
IP addresses (either IPv4 or IPv6) and IB GID. This information
in conjunction with the path record preloading allows
for the IPv4 and IPv6 ACM caches to be preloaded.
IPv4 was tested with both rping and ucmatose as well as
acme. IPv6 was tested with ucmatose and acme.
The remaining ACM cache to be preloaded is the name cache.
This will be added in subsequent patch.
Signed-off-by: Hal Rosenstock <hal@mellanox.com> Signed-off-by: Sean Hefty <sean.hefty@intel.com>
Hal Rosenstock [Thu, 27 Jun 2013 13:48:24 +0000 (16:48 +0300)]
Add the ability to preload the destination GID and LID caches
Preloading of these caches is supported via a file which is
produced by OpenSM by the dump_pr plugin which contains
sufficient SA PathRecord information. Details on this
file format and configuring OpenSM for this are found in
dump_pr_notes.txt in dump_pr.
File format is specified in ibacm_opts.cfg as follows:
path_rec_fmt full_opensm_v1
File format defaults to none which means no preload of ACM cache.
Signed-off-by: Hal Rosenstock <hal@mellanox.com> Signed-off-by: Sean Hefty <sean.hefty@intel.com>
Hal Rosenstock [Fri, 28 Jun 2013 01:08:27 +0000 (18:08 -0700)]
ib_acme: Enhance documention in generated ibacm_opt.cfg
Improve the description of the send_depth value in the generated
ibacm_opt.cfg file. Fixup a couple of other areas. Patch derived from
patches submitted by Hal.
Signed-off-by: Hal Rosenstock <hal@mellanox.com>. Signed-off-by: Sean Hefty <sean.hefty@intel.com>
Sean Hefty [Fri, 28 Jun 2013 01:04:39 +0000 (18:04 -0700)]
Remove sample ibacm_*.cfg files
Configuration files can be automatically generated using ib_acme. Remove
the files from the source tree, versus maintaining them and ensuring that
they remain in sync with the files generated by ib_acme.
Sean Hefty [Tue, 9 Oct 2012 00:00:14 +0000 (17:00 -0700)]
ibacm: Timeout address and route data
Add an option that allows address and route data to
time out. Once data has timed out, it needs to be
resolved again. This helps handle cases where the
remote data has changed.
Sean Hefty [Mon, 4 Jun 2012 18:38:54 +0000 (11:38 -0700)]
ibacm: Automatically select local port if not specified by path record
If the user specifies a DLID or DGID as part of a path record lookup,
automatically select a local port. This allows a user to query an SA
without needing to specify the local SLID or SGID.
Sean Hefty [Fri, 30 Mar 2012 23:31:08 +0000 (16:31 -0700)]
ibacm: Fixes to ACM package to support distros
Set of changes to fixup the ibacm package for inclusion into RedHat 6.
Changes are based on feedback from Doug Ledford <dledford@redhat.com>.
These are primarily changes to the build files, along with name changes
to the man pages and sample configuration files.
Rename the ib_acm service to match the package name, ibacm.
Rename the ibacm configuration files to use the prefix 'ibacm' instead
of 'acm'. The new sample files are 'ibacm_addr.cfg' and 'ibacm_opts.cfg'.
Move location of ACM lock and configuration files and ibacm.pid
files. They are currently in non-standard locations.
Modify ibacm and ib_acme to use $sysconfdir, $bindir, and rdmadir
configure values. The ibacm_addr.cfg and ibacm_opt.cfg files will now be
read/written to $sysconfdir/$rdmadir by default, with rdmadir defaulting
to 'rdma' if not specified.. And ibacm will execute
$bindir/ib_acme if it needs to create the ibacm_addr.cfg file. Without
$bindir, the ibacm service can fail to launch ib_acme when started
from an init script.
Add init script as part of install. The init script is installed
into $sysconfdir/init.d. The init script is processed by configure,
so that it executes the correct ibacm service that was installed.
Fixup man pages based on changes.
Signed-off-by: Doug Ledford <dledford@redhat.com> Signed-off-by: Sean Hefty <sean.hefty@intel.com>
Sean Hefty [Fri, 6 Apr 2012 15:12:02 +0000 (08:12 -0700)]
ibacm: Set default route resolution to SA
SA resolution works in more environments than the ACM protocol.
SA is the default protocol for the ibacm_opts.cfg file, but if
that file is not available, the ibacm service defaults to ACM.
Hal Rosenstock [Thu, 5 Apr 2012 23:29:52 +0000 (16:29 -0700)]
ib_acme: Better error handling in resolve_gid
A return of 0 is an error for inet_pton but if 0 is returned
from resolve_gid, show_path is mistakenly called so if
0 is returned from inet_pton, return -1 instead (which is
what is done elsewhere in acme).
Signed-off-by: Hal Rosenstock <hal@mellanox.com> Signed-off-by: Sean Hefty <sean.hefty@intel.com>
Hal Rosenstock [Thu, 5 Apr 2012 23:24:09 +0000 (16:24 -0700)]
ib_acme: Use IPv4 rather than IPv6 when connecting to ACM server
When both IPv4 and IPv6 are running, getaddrinfo indicates IPv6
rather than IPv4 and that currently causes a failure to connect to
the ACM server. Fix is to set the address family in the hint to
getaddrinfo to IPv4.
Signed-off-by: Hal Rosenstock <hal@mellanox.com> Signed-off-by: Sean Hefty <sean.hefty@intel.com>
mc_dest has a default refcnt of 0. When a multicast destination is
released, an attempt is made to free it, which can result in the
ibacm service crashing.
Sean Hefty [Mon, 27 Jun 2011 17:29:36 +0000 (10:29 -0700)]
ibacm: Add performance counters
Add performance counters to track service usage. Counters are exposed
via a new perf query request. Update ib_acme to retrieve counters from
a specified endpoint.
Counters that are currently defined are:
- Address and route resolution errors
- Resolution requests
- Requests not satisfied as a result of no data available
- Requests requiring an address lookup
- Requests that found address information in the cache
- Requests requiring a route lookup (i.e. path record query)
- Requests that found route information in the cache