<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=US-ASCII">
<META NAME="Generator" CONTENT="MS Exchange Server version 5.5.2654.45">
<TITLE>OpenSM Coding style</TITLE>
</HEAD>
<BODY>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">Hi,</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">Unlike the kernel code that adhere to the LINUX kernel coding style,</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">OpenSM uses coding style that was developed by Intel during the IBAL code development.</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">Although being different then the Kernel style OpenSM style is extensive and</FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">strictly</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"> followed</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">during the several years of</FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">its</FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">development</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype">.</FONT> </P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">It is needless to say keeping a standard coding style is important to any project (especially the side of OpenSM).</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">The full list</FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">of rules</FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">is presented below. I think we should keep it as OpenSM is a user level project that is mature. </FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">T</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype">h</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype">e point is that we MUST make sure any new code added is following the current coding style. </FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">Even if we later</FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">decide to use the kernel style (which I doubt the need for) we have to keep</FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">the</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"></FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">current rules.</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">Some automaton for checking for these rules and fixing violations is provided by the script osm_check_n_fix.</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">The following emacs automation can also be used for</FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">indentation</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"></FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">rule and some simple fixes</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">Apparently the new osm_vendor_umad.*</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"> code breaks some of the rules.</FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">I hope we can agree to fix these violations.</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">Thanks</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">Eitan Zahavi</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">OpenSM Coding Style Rules</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">----------------------------------------</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">OpenSM incorporates a coding style that includes the following rules:</FONT></P>

<P><FONT COLOR="#0000FF" FACE="Palatino Linotype">1.     </FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">Use { } on a separate line</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"> then the if and else </FONT>
<BR><FONT COLOR="#0000FF" FACE="Palatino Linotype">2.     </FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">Use</FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">function declaration</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype">/definition</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"> style that includes:</FONT>
<BR><FONT COLOR="#0000FF" FACE="Palatino Linotype">a.     </FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">A standard header that is</FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">readable</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"> by robodoc</FONT>
<BR><FONT COLOR="#0000FF" FACE="Palatino Linotype">b.     </FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">Each parameter is defined on its own line and indented</FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">by 2 spaces.</FONT>
<BR><FONT COLOR="#0000FF" FACE="Palatino Linotype">c.     </FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">Use IN or OUT or IN OUT prefix for each parameter</FONT>
<BR><FONT COLOR="#0000FF" FACE="Palatino Linotype">3.     </FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">Each struct also have a typedef with</FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">the format :<BR>
typedef struct _</FONT><I><FONT COLOR="#0000FF" FACE="Palatino Linotype">x {</FONT></I><I><FONT COLOR="#0000FF" FACE="Palatino Linotype">...</FONT></I><I><FONT COLOR="#0000FF" FACE="Palatino Linotype">} x</FONT></I><FONT COLOR="#0000FF" FACE="Palatino Linotype">_t;</FONT>
<BR><FONT COLOR="#0000FF" FACE="Palatino Linotype">4.     </FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">Logs:</FONT>
<BR><FONT COLOR="#0000FF" FACE="Palatino Linotype">a.     </FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">Most functions that have access to the log object use :<BR>
</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype">OSM_LOG_ENTER( p_log,</FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype"><function name>);<BR>
and<BR>
OSM_L</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype">OG_EXIT( p_log );</FONT>
<BR><FONT COLOR="#0000FF" FACE="Palatino Linotype">b.     </FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">The following log verbosity levels are defined:</FONT><BR>
<FONT COLOR="#0000FF" FACE="Palatino Linotype">OSM_LOG_ERROR  </FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">- report fabric response errors or any abnormal algorithmic condition</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"> (see c).</FONT><BR>
<FONT COLOR="#0000FF" FACE="Palatino Linotype">OSM_LOG_INFO</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"></FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">-</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"> Information regarding</FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">major</FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">results</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"> of fabric initialization and SA operations</FONT><BR>
<FONT COLOR="#0000FF" FACE="Palatino Linotype">OSM_LOG_VERBOSE</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"></FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">-</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"> Detailed information of initialization activities and SA operations</FONT><BR>
<FONT COLOR="#0000FF" FACE="Palatino Linotype">OSM_LOG_DEBUG</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"></FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">-</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"> Even more information</FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">-</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"> intended for debugging of OpenSM</FONT><BR>
<FONT COLOR="#0000FF" FACE="Palatino Linotype">O</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype">SM_LOG_FUNCS</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"></FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">-</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"> ENTER and EXIT function only</FONT><BR>
<FONT COLOR="#0000FF" FACE="Palatino Linotype">OSM_LOG_FRAMES</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"></FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">-</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"> MAD contents</FONT><BR>
<FONT COLOR="#0000FF" FACE="Palatino Linotype">OSM_LOG_ROUTING</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"></FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">-</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"> Dump out routing results</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype">.</FONT><BR>
<FONT COLOR="#0000FF" FACE="Palatino Linotype">OSM_LOG_SYS</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"></FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">-</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"> Information that should go into /var/log/messages</FONT>
<BR><FONT COLOR="#0000FF" FACE="Palatino Linotype">c.     </FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">ERROR</FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">messages</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"> should be numbered by the following rule:</FONT><BR>
<FONT COLOR="#0000FF" FACE="Palatino Linotype"><module code 2 hex digits><serial err number in the module></FONT><BR>
<FONT COLOR="#0000FF" FACE="Palatino Linotype">An example error</FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">statement</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"> should look like:<BR>
</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype">osm_log( p_log, OSM_LOG_ERROR,</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"></FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">"</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"><function name></FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype">: ERR 1B02: "</FONT><BR>
<FONT COLOR="#0000FF" FACE="Palatino Linotype">               </FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">"Error Init of qlock pool (%d).\n",</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"></FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype"> status  );</FONT><BR>
<FONT COLOR="#0000FF" FACE="Palatino Linotype">Module codes are unique to each C file.</FONT> 
<BR><FONT COLOR="#0000FF" FACE="Palatino Linotype">d.     </FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">Any</FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">message</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"> should include the function name it is part of</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype">. For example:</FONT><BR>
<FONT COLOR="#0000FF" FACE="Palatino Linotype">osm_log(</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"></FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">p_log, OSM_LOG_DEBUG,</FONT><BR>
<FONT COLOR="#0000FF" FACE="Palatino Linotype">             </FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype"> "__add_new_mgrp_port: "</FONT><BR>
<FONT COLOR="#0000FF" FACE="Palatino Linotype">              </FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">"create new port with proxy_join FALSE\n");</FONT>
<BR><FONT COLOR="#0000FF" FACE="Palatino Linotype">5.     </FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">Each module should have a module header (see osm_base.h for example) describing the module intent, thread</FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">safety</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"> opacity, etc.</FONT></P>

<P><FONT COLOR="#0000FF" FACE="Palatino Linotype">6.     </FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">Usage of TABs is not allowed. Indentation is 3 space instead. This provides</FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">"</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype">editor invariable</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype">"</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype"> behavior.</FONT> 
<BR><FONT COLOR="#0000FF" FACE="Palatino Linotype">7.     </FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">No spaces at end of line.</FONT>
</P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">EMACS Rules Enforcement Automation</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">--------------------------------------------------------</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">;; prevent emacs from using tabs during identation</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">(setq indent-tabs-mode nil)</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">(setq-default indent-tabs-mode nil)</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">(custom-set-variables</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">'(tab-width 3)</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">'(tcl-continued-indent-level 3))</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">;; making C style like OpenSM :</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">(defun my-c-mode-common-hook ()</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  ;; my customizations for all of c-mode, c++-mode, objc-mode, java-mode</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  (c-set-offset 'substatement-open 0)</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  (c-set-offset 'arglist-intro '+)</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  ;(c-set-offset 'arglist-cont 0)</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  ;; other customizations can go here</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  )</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">;; utilities for C file indentation etc</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">(defun kill-oel-spaces ()</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  (interactive)</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  (goto-char 1)</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  (replace-regexp "[ \t]$" "")</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  )</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">(defun untabify-buffer ()</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  (interactive)</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  (end-of-buffer)</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  (untabify 1 (point) )</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  )</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">(defun indent-buffer ()</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  (interactive)</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  (end-of-buffer)</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  (indent-region 1 (point) nil)</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  )</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">(defun fix-brace-on-if-statements ()</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  (interactive)</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  (goto-char 1)</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  (replace-regexp "^\\([ \t]*if.*\\)[{]" "\\1</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">{")</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  )</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">(defun fix-brace-on-else-statements ()</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  (interactive)</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  (goto-char 1)</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  (replace-regexp "^[ \t]*[}][ \t]+else+[ \t][{]" "}</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype"> </FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">else</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  </FONT> <FONT COLOR="#0000FF" FACE="Palatino Linotype">{")</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  )</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">(defun beauty-c-buffer ()</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  (interactive)</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  (fix-brace-on-if-statements)</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  (fix-brace-on-else-statements)</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  (indent-buffer)</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  (kill-oel-spaces)</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" FACE="Palatino Linotype">  (untabify-buffer)</FONT><FONT COLOR="#0000FF" FACE="Palatino Linotype">)</FONT></P>

<P ALIGN=LEFT><B><I></I></B><A NAME="_MailAutoSig"><B><I><FONT COLOR="#0000FF" SIZE=6 FACE="Monotype Corsiva">Eitan Zahavi</FONT></I></B></A></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" SIZE=2 FACE="Tahoma">Design Technology Director</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" SIZE=2 FACE="Tahoma">Mellanox Technologies LTD</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" SIZE=2 FACE="Tahoma">Tel:+972-4-9097208<BR>
Fax:+972-4-9593245</FONT></P>

<P ALIGN=LEFT><FONT COLOR="#0000FF" SIZE=2 FACE="Tahoma">P.O. Box 586 Yokneam 20692 ISRAEL</FONT></P>

<P ALIGN=LEFT></P>

</BODY>
</HTML>