1IBACM_PROV(7) IB ACM Provider Guide IBACM_PROV(7)
2
3
4
6 ibacm_prov - InfiniBand communication management assistant provider
7 interface
8
10 #include <infiniband/acm_prov.h>
11
13 The ibacm provider interface provides a plugin interface that allows a
14 vendor to implement proprietary solutions to support scalable address
15 and route resolution services over InfiniBand.
16
17 To add a provider to the ibacm core service, the provider must
18
19 1. be implemented as a shared library;
20
21 2. be installed under a configured directory, eg., /usr/lib64/ibacm;
22
23 3 export a function provider_query() that returns a pointer to its
24 provider info
25 and version info.
26
27 The prototype of provider_query function is defined below:
28
29 int provider_query(struct acm_provider **info, uint32_t *version);
30
31 This function should return a pointer to its provider structure:
32
33 struct acm_provider {
34 size_t size;
35 uint32_t version;
36 char *name;
37 int (*open_device)(const struct acm_device *device,
38 void **dev_context);
39 void (*close_device)(void *dev_context);
40 int (*open_port)(const struct acm_port *port,
41 void *dev_context, void **port_context);
42 void (*close_port)(void *port_context);
43 int (*open_endpoint)(const struct acm_endpoint *endpoint,
44 void *port_context, void **ep_context);
45 void (*close_endpoint)(void *ep_context);
46 int (*add_address)(const struct acm_address *addr, void *ep_context,
47 void **addr_context);
48 void (*remove_address)(void *addr_context);
49 int (*resolve)(void *addr_context, struct acm_msg *msg, uint64_t id);
50 int (*query)(void *addr_context, struct acm_msg *msg, uint64_t id);
51 int (*handle_event)(void *port_context, enum ibv_event_type type);
52 void (*query_perf)(void *ep_context, uint64_t *values, uint8_t *cnt);
53 };
54
55 The size and version fields provide a way to detect version compatibil‐
56 ity. When a port is assigned to the provider, the ibacm core will call
57 the open/add_address functions; Similarly, when a port is down or re-
58 assigned to another provider, the close/remove_address functions will
59 be invoked to release resources. The ibacm core will centralize the
60 management of events for each device and events not handled by the
61 ibacm core will be forwarded to the relevant port through the han‐
62 dle_event() function. The resolve() function will be called to resolve
63 a destination name into a path record. The performance of the provider
64 for each endpoint can be queried by calling perf_query().
65
66 To share a configuration file, the path for the ibacm configuration
67 file is exported through the variable opts_file. Each loaded provider
68 can open this configuration file and parse the contents related to its
69 own operation. Non-related sections should be ignored.
70
71 Some helper functions are also exported by the ibacm core. For example,
72 the acm_log define (or the acm_write() function) can be used to log
73 messages into ibacm's log file (default /var/log/ibacm.log). For
74 details, refer to the acm_prov.h file.
75
77 A provider should always set the version in its provider info structure
78 as the value of the define ACM_PROV_VERSION at the time the provider is
79 implemented. Never set the version to ACM_PROV_VERSION itself as the
80 define may be changed over time when the provider interface is changed,
81 unless the provider itself is placed in ibacm source tree. This is to
82 avoid the version problem when the old provider implementation is built
83 against a new acm_prov.h file. The ibacm will always check the version
84 of the provider at loading time.
85
87 ib_acme(1), ibacm(7), ibacm(8)
88
89
90
91IBACM_PROV 2014-06-16 IBACM_PROV(7)