Add -e flag to main in order to enable starting a new log file,
[mirror/winof/.git] / ulp / opensm / user / include / opensm / osm_subnet.h
1 /*
2  * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
3  * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
4  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
5  *
6  * This software is available to you under the OpenIB.org BSD license
7  * below:
8  *
9  *     Redistribution and use in source and binary forms, with or
10  *     without modification, are permitted provided that the following
11  *     conditions are met:
12  *
13  *      - Redistributions of source code must retain the above
14  *        copyright notice, this list of conditions and the following
15  *        disclaimer.
16  *
17  *      - Redistributions in binary form must reproduce the above
18  *        copyright notice, this list of conditions and the following
19  *        disclaimer in the documentation and/or other materials
20  *        provided with the distribution.
21  *
22  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
26  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
27  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
28  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
29  * SOFTWARE.
30  *
31  * $Id$
32  */
33
34
35 /*
36  * Abstract:
37  *      Declaration of osm_subn_t.
38  *      This object represents an IBA subnet.
39  *      This object is part of the OpenSM family of objects.
40  *
41  * Environment:
42  *      Linux User Mode
43  *
44  * $Revision: 1.12 $
45  */
46
47 #ifndef _OSM_SUBNET_H_
48 #define _OSM_SUBNET_H_
49
50
51 #include <iba/ib_types.h>
52 #include <complib/cl_qmap.h>
53 #include <complib/cl_map.h>
54 #include <complib/cl_ptr_vector.h>
55 #include <complib/cl_list.h>
56 #include <opensm/osm_base.h>
57
58 #ifdef __cplusplus
59 #  define BEGIN_C_DECLS extern "C" {
60 #  define END_C_DECLS   }
61 #else /* !__cplusplus */
62 #  define BEGIN_C_DECLS
63 #  define END_C_DECLS
64 #endif /* __cplusplus */
65
66 BEGIN_C_DECLS
67
68 #define OSM_SUBNET_VECTOR_MIN_SIZE                      0
69 #define OSM_SUBNET_VECTOR_GROW_SIZE                     1
70 #define OSM_SUBNET_VECTOR_CAPACITY                      256
71
72
73 /****h* OpenSM/Subnet
74 * NAME
75 *       Subnet
76 *
77 * DESCRIPTION
78 *       The Subnet object encapsulates the information needed by the
79 *       OpenSM to manage a subnet.  The OpenSM allocates one Subnet object
80 *       per IBA subnet.
81 *
82 *       The Subnet object is not thread safe, thus callers must provide
83 *       serialization.
84 *
85 *       This object is essentially a container for the various components
86 *       of a subnet.  Callers may directly access the member variables.
87 *
88 * AUTHOR
89 *       Steve King, Intel
90 *
91 *********/
92
93 /****f* OpenSM: Subnet/osm_pfn_ui_extension
94 * NAME
95 *       osm_pfn_ui_extension
96 *
97 * DESCRIPTION
98 *       This typedef defines the prototype for UI extension functions
99 *       The might be registered in the subnet options to handle pre_lid_assign,
100 *  and ui_ucast_fwd_assign.
101 *
102 * SYNOPSIS
103 */
104 typedef int
105 (*osm_pfn_ui_extension_t)(
106         IN      void*                           context);
107 /*
108 * PARAMETERS
109 *       context
110 *               [in] Client specific context specified in the subnet opt
111 *          Same prefix as the UI funciton (suffixed by ctx)
112 *
113 * RETURN VALUE
114 *       This function returns an int (the semantic is different between 
115 *  the different calls)
116 *
117 * SEE ALSO
118 *
119 *********/
120
121 /****f* OpenSM: Subnet/osm_pfn_ui_mcast_extension
122 * NAME
123 *       osm_pfn_ui_mcast_extension
124 *
125 * DESCRIPTION
126 *       This typedef defines the prototype for UI extension functions
127 *       They might be registered in the subnet options to handle ui_mcast_fwd_assign
128 *
129 * SYNOPSIS
130 */
131 typedef void
132 (*osm_pfn_ui_mcast_extension_t)(
133   IN    void                *context,
134   IN ib_net16_t            mlid,
135   IN osm_mcast_req_type_t  request_type,
136   IN ib_net64_t            port_guid );
137 /*
138 * PARAMETERS
139 *       context
140 *     [in] Client specific context specified in the subnet opt
141 *          Same prefix as the UI funciton (suffixed by ctx)
142 *
143 *  mlid
144 *     [in] multicast lid of the group handled.
145 *
146 *  request_type
147 *     [in] Type of MC request being handled (create/join/leave)
148 *
149 *  port_guid
150 *     [in] port gui of the port that was added/removed from the
151 *          multicast group handled.
152 *
153 * RETURN VALUE
154 *       This function does not return a value.
155 *
156 * SEE ALSO
157 *
158 *********/
159
160 /****d* OpenSM: Subnet/osm_testability_modes_t
161 * NAME
162 *       osm_testability_modes_t
163 *
164 * DESCRIPTION
165 *       Enumerates the possible testability modes.
166 *
167 * SYNOPSIS
168 */
169 typedef enum _osm_testability_modes
170 {
171   OSM_TEST_MODE_NONE = 0,
172   OSM_TEST_MODE_EXIT_BEFORE_SEND_HANDOVER,
173   OSM_TEST_MODE_MAX
174
175 } osm_testability_modes_t;
176 /***********/
177
178 /****s* OpenSM: Subnet/osm_subn_opt_t
179 * NAME
180 *       osm_subn_opt_t
181 *
182 * DESCRIPTION
183 *       Subnet options structure.  This structure contains the various
184 *       site specific configuration parameters for the subnet.
185 *
186 * SYNOPSIS
187 */
188 typedef struct _osm_subn_opt
189 {
190   ib_net64_t                                    m_key;
191   ib_net64_t               sm_key;
192   ib_net64_t                                    subnet_prefix;
193   ib_net16_t                                    m_key_lease_period;
194   uint32_t                                              sweep_interval;
195   uint32_t                                              max_wire_smps;
196   uint32_t                                              transaction_timeout;
197   uint8_t                                               sm_priority;
198   uint8_t                                               lmc;
199   uint8_t                  max_op_vls;
200   boolean_t                                             reassign_lids;
201   boolean_t                reassign_lfts;
202   boolean_t                                             ignore_other_sm;
203   boolean_t                                             single_thread;
204   boolean_t                                             no_multicast_option;
205   boolean_t                                             disable_multicast;
206   boolean_t                                             force_log_flush;
207   uint8_t                  subnet_timeout;
208   uint8_t                  packet_life_time;
209   uint8_t                  head_of_queue_lifetime;
210   uint8_t                  leaf_head_of_queue_lifetime;
211   uint8_t                  local_phy_errors_threshold;
212   uint8_t                  overrun_errors_threshold;
213   uint32_t                 sminfo_polling_timeout;
214   uint32_t                 polling_retry_number;
215   uint32_t                                              max_msg_fifo_timeout;
216   boolean_t                force_heavy_sweep;
217   uint8_t                  log_flags;
218   char *                   dump_files_dir;
219   char *                   log_file;
220   boolean_t                accum_log_file;
221   cl_map_t                 port_pro_ignore_guids;
222   boolean_t                port_profile_switch_nodes;
223   uint32_t                 max_port_profile;
224   osm_pfn_ui_extension_t   pfn_ui_pre_lid_assign;
225   void *                   ui_pre_lid_assign_ctx;
226   osm_pfn_ui_extension_t   pfn_ui_ucast_fdb_assign;
227   void *                   ui_ucast_fdb_assign_ctx;
228   osm_pfn_ui_mcast_extension_t pfn_ui_mcast_fdb_assign;
229   void *                   ui_mcast_fdb_assign_ctx;
230   boolean_t                sweep_on_trap;
231   osm_testability_modes_t  testability_mode;
232   boolean_t                updn_activate;
233   char *                   updn_guid_file;
234 } osm_subn_opt_t;
235 /*
236 * FIELDS
237 *
238 *       m_key
239 *               M_Key value sent to all ports qualifing all Set(PortInfo).
240 *
241 *  sm_key
242 *     SM_Key value of the SM to qualify rcv SA queries as "trusted".
243 *
244 *       subnet_prefix
245 *               Subnet prefix used on this subnet.
246 *
247 *       m_key_lease_period
248 *               The lease period used for the M_Key on this subnet.
249 *
250 *       sweep_interval
251 *               The number of seconds between subnet sweeps.  A value of 0
252 *               disables sweeping.
253 *
254 *       sm_priority
255 *               The priority of this SM as specified by the user.  This
256 *               value is made available in the SMInfo attribute.
257 *
258 *       lmc
259 *               The LMC value used on this subnet.
260 *
261 *  max_op_vls
262 *     Limit the maximal operational VLs. default is 1.
263 *
264 *       reassign_lids
265 *               If TRUE cause all lids to be re-assigend.
266 *               Otherwise (the default)
267 *     OpenSM always try to preserve as much LIDs as posible.
268 *
269 *  reassign_lfts
270 *     If TRUE ignore existing LFT entries on first sweep (default).
271 *     Otherwise only non minimal hop cases are modified.
272 *     NOTE: A standby SM clears its first sweep flag - since the
273 *     master SM already sweeps...
274 *
275 *       ignore_other_sm_option
276 *               This flag is TRUE if other SM's on the subnet should be ignored.
277 *
278 *       no_multicast_option
279 *               This flag is TRUE if OpenSM should disable multicast support.
280 *
281 *  max_msg_fifo_timeout
282 *     The maximal time a message can stay in the incoming message queue.
283 *     If there is more then one message in the queue and the last message
284 *     stayed in the queue more then this value the SA request will be 
285 *     immediately returned with a BUSY status. 
286 *
287 *  subnet_timeout
288 *     The subnet_timeout that will be set for all the ports in the
289 *     design SubnMgt.Set(PortInfo.vl_stall_life))
290 *
291 *  head_of_queue_lifetime
292 *     The maximal time a packet can live at the head of a VL queue
293 *     on any port not driving an HCA port
294 *
295 *  leaf_head_of_queue_lifetime
296 *     The maximal time a packet can live at the head of a VL queue
297 *     on switch ports driving a CA
298 *
299 *       local_phy_errors_threshold
300 *     Threshold of local phy errors for sending Trap 129
301 *
302 *       overrun_errors_threshold
303 *     Threshold of credits over-run errors for sending Trap 129
304 *
305 *  sminfo_polling_timeout
306 *     Specifies the polling timeout (in milliseconds) - the timeout
307 *     between one poll to another.
308 *
309 *  packet_life_time
310 *     The maximal time a packet can stay in a switch.
311 *     The value is send to all switches as SubnMgt.Set(SwitchInfo.life_state)
312 *
313 *  dump_files_dir
314 *     The directory to be used for subnet.lst osm.fdbs, osm.mcfdbs and default
315 *     log file (the latter for Windows, not Linux);
316 *
317 *  log_file
318 *     Name of the log file (or NULL) for stdout.
319 *
320 *  accum_log_file
321 *     If TRUE (default) - the log file will be accumulated.
322 *     If FALSE - the log file will be erased before starting current opensm run.
323 *
324 *  port_pro_ignore_guids
325 *     A map of guids to be ignored by port profiling.
326 *
327 *  port_profile_switch_nodes
328 *     If TRUE will count the number of switch nodes routed through
329 *     the link. If FALSE - only CA/RT nodes are counted.
330 *
331 *  max_port_profile
332 *     Prevent routing through a port subscribed with more then this
333 *     number of routes.
334 *
335 *  pfn_ui_pre_lid_assign
336 *     A UI function to be invoked prior to lid assigment. It should return 1
337 *     if any change was made to any lid or 0 otherwise.
338 *
339 *  ui_pre_lid_assign_ctx
340 *     A UI context (void *) to be provided to the pfn_ui_pre_lid_assign
341 *
342 *  pfn_ui_ucast_fdb_assign
343 *     A UI function to be called instead of the ucast manager FDB
344 *     configuration.
345 *
346 *  ui_ucast_fdb_assign_ctx
347 *     A UI context (void *) to be provided to the pfn_ui_ucast_fdb_assign
348 *
349 *  pfn_ui_mcast_fdb_assign
350 *     A UI function to be called inside the mcast manager instead of the
351 *     call for the build spanning tree. This will be called on every
352 *     multicast call for create, join and leave, and is responsible for
353 *     the mcast FDB configuration.
354 *
355 *  ui_mcast_fdb_assign_ctx
356 *     A UI context (void *) to be provided to the pfn_ui_mcast_fdb_assign
357 *
358 *  sweep_on_trap
359 *     Received traps will initiate a new sweep.
360 *
361 *  testability_mode
362 *     Object that indicates if we are running in a special testability mode.
363 *
364 *  updn_activate
365 *     Object that indicates if we are running the UPDN algorithm (TRUE) or 
366 *     Min Hop Algorithm (FALSE)
367 *
368 *  updn_guid_file
369 *     Pointer to name of the UPDN guid file given by User
370 *
371 * SEE ALSO
372 *       Subnet object
373 *********/
374
375 /****s* OpenSM: Subnet/osm_subn_t
376 * NAME
377 *       osm_subn_t
378 *
379 * DESCRIPTION
380 *       Subnet structure.  Callers may directly access member components,
381 *       after grabbing a lock.
382 *
383 * TO DO
384 *       This structure should probably be volatile.
385 *
386 * SYNOPSIS
387 */
388 typedef struct _osm_subn
389 {
390   cl_qmap_t                                             sw_guid_tbl;
391   cl_qmap_t                                             node_guid_tbl;
392   cl_qmap_t                                             port_guid_tbl;
393   cl_qmap_t                                             rtr_guid_tbl;
394   cl_qmap_t                                             prtn_pkey_tbl;
395   cl_qmap_t                                             mgrp_mlid_tbl;
396   cl_qmap_t                                             sm_guid_tbl;
397   cl_list_t                light_sweep_physp_list;
398   cl_qlist_t                                    sa_sr_list;
399   cl_qlist_t                                    sa_infr_list;
400   cl_ptr_vector_t                               node_lid_tbl;
401   cl_ptr_vector_t                               port_lid_tbl;
402   ib_net16_t                                    master_sm_base_lid;
403   ib_net16_t                                    sm_base_lid;
404   ib_net64_t                                    sm_port_guid;
405   uint8_t                                               sm_state;
406   osm_subn_opt_t                                opt;
407   uint16_t                                              max_unicast_lid_ho;
408   uint16_t                                              max_multicast_lid_ho;
409   uint8_t                  min_ca_mtu;
410   uint8_t                  min_ca_rate;
411   boolean_t                ignore_existing_lfts;
412   boolean_t                subnet_initialization_error;
413   boolean_t                force_immediate_heavy_sweep;
414   boolean_t                force_delayed_heavy_sweep;
415   cl_list_t                                             new_ports_list;
416   boolean_t                in_sweep_hop_0;
417   boolean_t                moved_to_master_state;
418   boolean_t                first_time_master_sweep;
419   boolean_t                coming_out_of_standby;
420 } osm_subn_t;
421 /*
422 * FIELDS
423 *       sw_guid_tbl
424 *               Container of pointers to all Switch objects in the subent.
425 *               Indexed by node GUID.
426 *
427 *       node_guid_tbl
428 *               Container of pointers to all Node objects in the subent.
429 *               Indexed by node GUID.
430 *
431 *       port_guid_tbl
432 *               Container of pointers to all Port objects in the subent.
433 *               Indexed by port GUID - network order!
434 *
435 *       rtr_guid_tbl
436 *               Container of pointers to all Router objects in the subent.
437 *               Indexed by node GUID.
438 *
439 *       prtn_pkey_tbl
440 *               Container of pointers to all Partition objects in the subnet.
441 *               Indexed by P_KEY.
442 *
443 *       mgrp_mlid_tbl
444 *               Container of pointers to all Multicast Group objects in the subnet.
445 *               Indexed by MLID.
446 *
447 *       sm_guid_tbl
448 *               Container of pointers to Other SM objects representing other SM's
449 *               on the subnet.
450 *
451 *  light_sweep_physp_list
452 *     A list of all phys ports to scan for a change in remote
453 *     side state in next light sweep. These ports are not down 
454 *     but for some reason the remote side did not answer.
455 *
456 *       node_lid_tbl
457 *               Container of pointers to all Node objects in the subent.
458 *               Indexed by node LID.
459 *
460 *       port_ptr_tbl
461 *               Container of pointers to all Port objects in the subent.
462 *               Indexed by port LID.
463 *
464 *       master_sm_base_lid
465 *               The base LID owned by the subnet's master SM.
466 *
467 *       sm_base_lid
468 *               The base LID of the local port where the SM is.
469 *
470 *       sm_port_guid
471 *               This SM's own port GUID.
472 *
473 *       sm_state
474 *               The high-level state of the SM.  This value is made available
475 *               in the SMInfo attribute.
476 *
477 *       opt
478 *               Subnet options structure contains site specific configuration.
479 *
480 *       max_unicast_lid_ho
481 *               The minimal max unicast lid reported by all switches
482 *
483 *       max_multicast_lid_ho
484 *               The minimal max multicast lid reported by all switches
485 *
486 *  min_ca_mtu
487 *     The minimal MTU reported by all CAs ports on the subnet
488 *
489 *  min_ca_rate
490 *     The minimal rate reported by all CA ports on the subnet
491 *
492 *  ignore_existing_lfts
493 *     This flag is a dynamic flag to instruct the LFT asssign to
494 *     ignore existing legal LFT settings.
495 *     The value will be set according to :
496 *     - During SM init set to the reassign_lfts flag value
497 *     - Comming out of STANDBY it will be cleared (other SM worked)
498 *     - Any change to the list of switches will set it to high
499 *     - Set to FALSE on end of all lft assignments.
500 *
501 *  subnet_initalization_error
502 *     Similar to the force_immediate_heavy_sweep flag. If TRUE -
503 *     means that we had errors during initialization (due to SubnSet requests
504 *     that failed). We want to declare the subnet as un-healthy, and force
505 *     another heavy sweep.
506 *
507 *  force_immediate_heavy_sweep
508 *     If TRUE - we want to force a heavy sweep. This can be done either
509 *     due to receiving of trap - meaning there is some change on the subnet,
510 *     or we received a handover from a remote sm.
511 *     In this case we want to sweep and reconfigure the entire subnet.
512 *     This will cause another heavy sweep to occure when the current sweep
513 *     is done.
514 *
515 *  force_delayed_heavy_sweep
516 *     In some means - similar to the force_immediate_heavy_sweep flag, only
517 *     it'll cause a heavy sweep in the next sweep. Note that this means that
518 *     if we are running with -s 0 (no sweeps) - then this forced heavy sweep
519 *     will not occur.
520 *     If we had some trouble on the subnet, that caused a strange dropping
521 *     of ports - we will try to do another heavy sweep on our next sweep.
522 *
523 *  new_ports_list
524 *     Container of pointers to port objects that were discovered for
525 *     the first time during a current sweep.
526 *
527 *  in_sweep_hop_0
528 *     When in_sweep_hop_0 flag is set to TRUE - this means we are
529 *     in sweep_hop_0 - meaning we do not want to continue beyond
530 *     the current node.
531 *     This is relevant for the case of SM on switch, since in the
532 *     switch info we need to signal somehow not to continue
533 *     the sweeping.
534 *
535 *  moved_to_master_state
536 *     Used for the writing of "SUBNET UP" into /var/log/messages.
537 *     Will be TRUE when the SM switches to Master state, and returned
538 *     to FALSE once the sunbet is up.
539 *
540 *  first_time_master_sweep
541 *     This flag is used for the PortInfo setting. On the first sweep as master
542 *     (meaning after moving from Standby|Discovering state), the SM must send
543 *     a PortInfoSet to all ports. After that - we want to minimize the number of
544 *     PortInfoSet requests sent, and to send only requests that change the value
545 *     from what is updated in the port (or send a first request if this is a new port).
546 *     We will set this flag to TRUE when entering the master state, and set it back
547 *     to FALSE at the end of the drop manager. This is done since at the end of the
548 *     drop manager we have updated all the ports that are reachable, and from now on
549 *     these are the only ports we have data of. We don't want to send extra set requests
550 *     to these ports anymore.
551 *
552 *  coming_out_of_standby
553 *     TRUE on the first sweep after the SM was in standby.
554 *     Used for nulling any cache of LID and Routing.
555 *     The flag is set true if the SM state was standby and now changed to MASTER
556 *     it is reset at the end of the sweep.
557 *
558 * SEE ALSO
559 *       Subnet object
560 *********/
561
562 /****f* OpenSM: Subnet/osm_subn_construct
563 * NAME
564 *       osm_subn_construct
565 *
566 * DESCRIPTION
567 *       This function constructs a Subnet object.
568 *
569 * SYNOPSIS
570 */
571 void
572 osm_subn_construct(
573         IN osm_subn_t* const p_subn );
574 /*
575 * PARAMETERS
576 *       p_subn
577 *               [in] Pointer to a Subnet object to construct.
578 *
579 * RETURN VALUE
580 *       This function does not return a value.
581 *
582 * NOTES
583 *       Allows calling osm_subn_init, osm_subn_destroy, and osm_subn_is_inited.
584 *
585 *       Calling osm_subn_construct is a prerequisite to calling any other
586 *       method except osm_subn_init.
587 *
588 * SEE ALSO
589 *       Subnet object, osm_subn_init, osm_subn_destroy, osm_subn_is_inited
590 *********/
591
592 /****f* OpenSM: Subnet/osm_subn_destroy
593 * NAME
594 *       osm_subn_destroy
595 *
596 * DESCRIPTION
597 *       The osm_subn_destroy function destroys a subnet, releasing
598 *       all resources.
599 *
600 * SYNOPSIS
601 */
602 void
603 osm_subn_destroy(
604         IN osm_subn_t* const p_subn );
605 /*
606 * PARAMETERS
607 *       p_subn
608 *               [in] Pointer to a Subnet object to destroy.
609 *
610 * RETURN VALUE
611 *       This function does not return a value.
612 *
613 * NOTES
614 *       Performs any necessary cleanup of the specified Subnet object.
615 *       Further operations should not be attempted on the destroyed object.
616 *       This function should only be called after a call to osm_subn_construct or
617 *       osm_subn_init.
618 *
619 * SEE ALSO
620 *       Subnet object, osm_subn_construct, osm_subn_init
621 *********/
622
623 /****f* OpenSM: Subnet/osm_subn_init
624 * NAME
625 *       osm_subn_init
626 *
627 * DESCRIPTION
628 *       The osm_subn_init function initializes a Subnet object for use.
629 *
630 * SYNOPSIS
631 */
632 ib_api_status_t
633 osm_subn_init(
634         IN osm_subn_t* const p_subn,
635         IN const osm_subn_opt_t* const p_opt );
636 /*
637 * PARAMETERS
638 *       p_subn
639 *               [in] Pointer to an osm_subn_t object to initialize.
640 *
641 *       p_opt
642 *               [in] Pointer to the subnet options structure.
643 *
644 * RETURN VALUES
645 *       IB_SUCCESS if the Subnet object was initialized successfully.
646 *
647 * NOTES
648 *       Allows calling other Subnet methods.
649 *
650 * SEE ALSO
651 *       Subnet object, osm_subn_construct, osm_subn_destroy,
652 *       osm_subn_is_inited
653 *********/
654
655 /*
656   Forward reference.
657 */
658 struct _osm_mad_addr;
659 struct _osm_log;
660 struct _osm_switch;
661 struct _osm_physp;
662 struct _osm_port;
663
664 /****f* OpenSM: Helper/osm_get_gid_by_mad_addr
665 * NAME
666 *       osm_get_gid_by_mad_addr
667 *
668 * DESCRIPTION
669 *       Looks for the requestor gid in the mad address.
670 *
671 * Note: This code is not thread safe. Need to grab the lock before
672 * calling it.
673 *
674 * SYNOPSIS
675 */
676 ib_gid_t
677 osm_get_gid_by_mad_addr(
678    IN struct _osm_log      *p_log,
679    IN const osm_subn_t     *p_subn,
680         IN const struct _osm_mad_addr *p_mad_addr );
681 /*
682 * PARAMETERS
683 *  p_log
684 *     [in] Pointer to a log object.
685 *
686 *  p_subn
687 *     [in] Pointer to subnet object.
688 *
689 *       p_mad_addr
690 *               [in] Pointer to mad address object.
691 *
692 * RETURN VALUES
693 *       Requestor gid object if found. Null otherwise.
694 *
695 * NOTES
696 *
697 * SEE ALSO
698 *********/
699
700 /****f* OpenSM: Helper/osm_get_physp_by_mad_addr
701 * NAME
702 *       osm_get_physp_by_mad_addr
703 *
704 * DESCRIPTION
705 *       Looks for the requestor physical port in the mad address.
706 *
707 * Note: This code is not thread safe. Need to grab the lock before
708 * calling it.
709 *
710 * SYNOPSIS
711 */
712 struct _osm_physp *
713 osm_get_physp_by_mad_addr(
714    IN struct _osm_log      *p_log,
715    IN const osm_subn_t     *p_subn,
716         IN struct _osm_mad_addr *p_mad_addr );
717 /*
718 * PARAMETERS
719 *  p_log
720 *     [in] Pointer to a log object.
721 *
722 *  p_subn
723 *     [in] Pointer to subnet object.
724 *
725 *       p_mad_addr
726 *               [in] Pointer to mad address object.
727 *
728 * RETURN VALUES
729 *       Pointer to requestor physical port object if found. Null otherwise.
730 *
731 * NOTES
732 *
733 * SEE ALSO
734 *********/
735
736 /****f* OpenSM: Helper/osm_get_port_by_mad_addr
737 * NAME
738 *       osm_get_port_by_mad_addr
739 *
740 * DESCRIPTION
741 *       Looks for the requestor port in the mad address.
742 *
743 * Note: This code is not thread safe. Need to grab the lock before
744 * calling it.
745 *
746 * SYNOPSIS
747 */
748 struct _osm_port *
749 osm_get_port_by_mad_addr(
750    IN struct _osm_log      *p_log,
751    IN const osm_subn_t     *p_subn,
752         IN struct _osm_mad_addr *p_mad_addr );
753 /*
754 * PARAMETERS
755 *  p_log
756 *     [in] Pointer to a log object.
757 *
758 *  p_subn
759 *     [in] Pointer to subnet object.
760 *
761 *       p_mad_addr
762 *               [in] Pointer to mad address object.
763 *
764 * RETURN VALUES
765 *       Pointer to requestor port object if found. Null otherwise.
766 *
767 * NOTES
768 *
769 * SEE ALSO
770 *********/
771
772 /****f* OpenSM: Subnet/osm_get_switch_by_guid
773 * NAME
774 *       osm_get_switch_by_guid
775 *
776 * DESCRIPTION
777 *       The looks for the given switch guid in the subnet table of switches by guid.
778 *  NOTE: this code is not thread safe. Need to grab the lock before
779 *  calling it.
780 *
781 * SYNOPSIS
782 */
783 struct _osm_switch *
784 osm_get_switch_by_guid(
785         IN const osm_subn_t *p_subn,
786    IN uint64_t          guid);
787 /*
788 * PARAMETERS
789 *       p_subn
790 *               [in] Pointer to an osm_subn_t object
791 *
792 *       guid
793 *               [in] The node guid in host order
794 *
795 * RETURN VALUES
796 *       The switch structure pointer if found. NULL otherwise.
797 *  NOTE: should be called only after osm_subn_is_inited
798 *
799 * SEE ALSO g529
800
801 *       Subnet object, osm_subn_construct, osm_subn_destroy,
802 *       osm_subn_is_inited, osm_switch_t
803 *********/
804 /****f* OpenSM: Subnet/osm_get_node_by_guid
805 * NAME
806 *       osm_get_node_by_guid
807 *
808 * DESCRIPTION
809 *       The looks for the given node giud in the subnet table of nodes by guid.
810 *  NOTE: this code is not thread safe. Need to grab the lock before
811 *  calling it.
812 *
813 * SYNOPSIS
814 */
815 struct _osm_node *
816 osm_get_node_by_guid(
817         IN osm_subn_t  const *p_subn,
818    IN uint64_t    guid);
819 /*
820 * PARAMETERS
821 *       p_subn
822 *               [in] Pointer to an osm_subn_t object
823 *
824 *       guid
825 *               [in] The node guid in host order
826 *
827 * RETURN VALUES
828 *       The node structure pointer if found. NULL otherwise.
829 *  NOTE: should be called only after osm_subn_is_inited
830 *
831 * SEE ALSO
832 *       Subnet object, osm_subn_construct, osm_subn_destroy,
833 *       osm_subn_is_inited, osm_node_t
834 *********/
835
836 /****f* OpenSM: Subnet/osm_get_port_by_guid
837 * NAME
838 *       osm_get_port_by_guid
839 *
840 * DESCRIPTION
841 *       The looks for the given port guid in the subnet table of ports by guid.
842 *  NOTE: this code is not thread safe. Need to grab the lock before
843 *  calling it.
844 *
845 * SYNOPSIS
846 */
847 struct _osm_port *
848 osm_get_port_by_guid(
849         IN osm_subn_t  const *p_subn,
850    IN uint64_t    guid);
851 /*
852 * PARAMETERS
853 *       p_subn
854 *               [in] Pointer to an osm_subn_t object
855 *
856 *       guid
857 *               [in] The port guid in host order
858 *
859 * RETURN VALUES
860 *       The port structure pointer if found. NULL otherwise.
861 *  NOTE: should be called only after osm_subn_is_inited
862 *
863 * SEE ALSO
864 *       Subnet object, osm_subn_construct, osm_subn_destroy,
865 *       osm_subn_is_inited, osm_port_t
866 *********/
867
868 /****f* OpenSM: Helper/osm_get_physp_by_mad_addr
869 * NAME
870 *       osm_get_physp_by_mad_addr
871 *
872 * DESCRIPTION
873 *       Looks for the requestor physical port in the mad address.
874 *
875 * Note: This code is not thread safe. Need to grab the lock before
876 * calling it.
877 *
878 * SYNOPSIS
879 */
880 struct _osm_physp *
881 osm_get_physp_by_mad_addr(
882    IN struct _osm_log      *p_log,
883    IN const osm_subn_t     *p_subn,
884         IN struct _osm_mad_addr *p_mad_addr );
885 /*
886 * PARAMETERS
887 *  p_log
888 *     [in] Pointer to a log object.
889 *
890 *  p_subn
891 *     [in] Pointer to subnet object.
892 *
893 *       p_mad_addr
894 *               [in] Pointer to mad address object.
895 *
896 * RETURN VALUES
897 *       Pointer to requestor physical port object if found. Null otherwise.
898 *
899 * NOTES
900 *
901 * SEE ALSO
902 *********/
903
904 /****f* OpenSM: Subnet/osm_subn_set_default_opt
905 * NAME
906 *       osm_subn_set_default_opt
907 *
908 * DESCRIPTION
909 *       The osm_subn_set_default_opt function sets the default options.
910 *
911 * SYNOPSIS
912 */
913 void
914 osm_subn_set_default_opt(
915         IN osm_subn_opt_t* const p_opt );
916 /*
917 * PARAMETERS
918 *
919 *       p_opt
920 *               [in] Pointer to the subnet options structure.
921 *
922 * RETURN VALUES
923 *       None
924 *
925 * NOTES
926 *
927 * SEE ALSO
928 *       Subnet object, osm_subn_construct, osm_subn_destroy,
929 *       osm_subn_is_inited
930 *********/
931
932 /****f* OpenSM: Subnet/osm_subn_set_default_opt
933 * NAME
934 *       osm_subn_set_default_opt
935 *
936 * DESCRIPTION
937 *       The osm_subn_set_default_opt function sets the default options.
938 *
939 * SYNOPSIS
940 */
941 void
942 osm_subn_set_default_opt(
943         IN osm_subn_opt_t* const p_opt );
944 /*
945 * PARAMETERS
946 *
947 *       p_opt
948 *               [in] Pointer to the subnet options structure.
949 *
950 * RETURN VALUES
951 *       None
952 *
953 * NOTES
954 *
955 * SEE ALSO
956 *       Subnet object, osm_subn_construct, osm_subn_destroy,
957 *       osm_subn_is_inited
958 *********/
959
960 /****f* OpenSM: Subnet/osm_subn_parse_conf_file
961 * NAME
962 *       osm_subn_parse_conf_file
963 *
964 * DESCRIPTION
965 *       The osm_subn_parse_conf_file function parses the configuration file
966 *       and sets the defaults accordingly.
967 *
968 * SYNOPSIS
969 */
970 void
971 osm_subn_parse_conf_file(
972   IN osm_subn_opt_t* const p_opt );
973 /*
974 * PARAMETERS
975 *
976 *       p_opt
977 *               [in] Pointer to the subnet options structure.
978 *
979 * RETURN VALUES
980 *       None
981 *
982 * NOTES
983 *  Assumes the conf file is part of the cache dir which defaults to
984 *  OSM_DEFAULT_CACHE_DIR or OSM_CACHE_DIR the name is opensm.opts
985 *
986 * SEE ALSO
987 *       Subnet object, osm_subn_construct, osm_subn_destroy,
988 *       osm_subn_is_inited
989 *********/
990
991 /****f* OpenSM: Subnet/osm_subn_write_conf_file
992 * NAME
993 *       osm_subn_write_conf_file
994 *
995 * DESCRIPTION
996 *  Write the configuration file into the cache
997 *
998 * SYNOPSIS
999 */
1000 void
1001 osm_subn_write_conf_file(
1002   IN osm_subn_opt_t* const p_opt );
1003 /*
1004 * PARAMETERS
1005 *
1006 *       p_opt
1007 *               [in] Pointer to the subnet options structure.
1008 *
1009 * RETURN VALUES
1010 *       None
1011 *
1012 * NOTES
1013 *  Assumes the conf file is part of the cache dir which defaults to
1014 *  OSM_DEFAULT_CACHE_DIR or OSM_CACHE_DIR the name is opensm.opts
1015 *
1016 * SEE ALSO
1017 *       Subnet object, osm_subn_construct, osm_subn_destroy,
1018 *       osm_subn_is_inited
1019 *********/
1020
1021 END_C_DECLS
1022
1023 #endif /* _OSM_SUBNET_H_ */