Skip to topic | Skip to bottom
Home
You are here: TWiki > AFSLore Web > CodeArchitecture r3 - 14 Aug 2008 - 00:22 - StevenJenkins


Start of topic | Skip to actions
-- StevenJenkins - 08 Jun 2007

This is an entry point into the code architecture. As always, the source for your release is the authoritative reference, but this wiki is designed to help navigate the source and point out relevant documentation.

-- Starting Point --

  • http://www.openafs.org/cgi-bin/cvsweb.cgi/openafs/doc/pdf/ Early architectural documents. Out of date, but still important. You should especially read the Architectural Overview document (archov-doc.pdf)
  • To understand the source layout, consult src/SOURCE-MAP -- this is a good place to go after reading the Architectural Overview
  • Need to document the build environment issues -- README, DEVEL, CVS
  • src/BUILDNOTES (at least in the 1.4 tree) is not very helpful

-- Source Browsing --

  • Getting the source, preferably via CVS

CVS has the following line:

Do not use the CVS tree unless you know what you're doing.

This document helps you learn what you're doing.

  • cvs co, regen.sh (& when to run regen.sh)


In the source itself ---

  • find | grep is very helpful. For example, to find all the RX packages (ie, so that you can start to identify the various namespaces of components), you can do:

find . -name \*.xg -exec grep -H "^package" {} \; | grep -v 'example' | grep -v 'bulktest' | \
  sed -e 's|^./src/||' | sed -e 's/package/ /' | awk '{printf "%10s   %s\n", $2, $1}'

which results in:

    VOTE_   ubik/ubik_int.xg:
     DISK_   ubik/ubik_int.xg:
   SAMPLE_   ubik/utst_int.xg:
       VL_   vlserver/vldbint.xg:
   UPDATE_   update/update.xg:
     TEST_   rxgk/test.xg:
     RXGK_   rxgk/rxgk_proto.xg:
  RXAFSCB_   fsint/afscbint.xg:
    RXAFS_   fsint/afsint.xg:
  RXSTATS_   rxstat/rxstat.xg:
       PR_   ptserver/ptint.xg:
     BOZO_   bozo/bosint.xg:
    BUMON_   bubasics/backmon.xg:
       TC_   bubasics/butc.xg:
       BC_   bubasics/bumon.xg:
      ADK_   dauth/adkint.xg:
   RMTSYS_   sys/rmtsys.xg:
    AFSVol   volser/volint.xg:

In other words, if something starts with BOZO_, you know that it is generated by rxgen, and the interface is defined in bozo/bosint.xg.

In addition to the package name, also note that only rxstat uses an M prefix; all others use S.

  • cscope: a source code browser, linked to your editor. Setup is simple: cd to your source tree and run:
cscope -R -b
Then run
cscope -d
to start. The interface is simple. I tend to use it for finding things, but not necessarily for editing. When I'm studying the source, trying to understand how components link together, or bug-hunting, I tend to live inside cscope.

  • doxygen: what it is, how to set up, how to use, how to make even more useful (ie, src code changes)

  • gdb: examples of using (primarily b, bt)
Edit | Attach | Printable | Raw View | Backlinks: Web, All Webs | History: r3 < r2 < r1 | More topic actions
This site is powered by the TWiki collaboration platformCopyright © 1999-2008 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback