| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- There are two sets of modules involved in this system, one set lives
- on each bus (we will call them Client Side), and those that live on the
- central server (we will calal them Server Side).
- --------------------------------------------------
- Client Side Modules
- --------------------------------------------------
- Module Name: PPP Dialer
- Module Function:
- Maintains connection with the server as much as possible using pppd
- to set up a gprs internet connection, and then using an ssh client to set up
- secure tunnels for each of the underlying Client->Server protocols
- implemented by the other modules.
- Module Files: (these files live in /etc/ppp/)
- ppp-dialer.sh (script to manage ppp connection and SSH tunnels)
- pap-secrets (password file for bogus user that modem needs)
- chap-secrets (same as above)
- ip-down.local (script to run when pppd link does down)
- ip-up.local (script to run when pppd link comes up)
- options (global pppd options)
- chat/disconnect (modem disconnect sequence)
- chat/gprs (modem init sequence, gprs specific dial string)
- peers/gprs (modem location, gprs specific pppd settings)
- Module Outputs:
-
- /tmp/network-is-up (this file is present when ppp0 is up)
- /tmp/tunnel-is-up (this file is present when SSH tunnel is up)
- /tmp/ssh_tunnel.pid (pidfile for ssh client implementing tunnel)
- -------------------
- Module Name: Client Supervisor
- Module Function:
- This module serves a function for our application (as a set of
- client modules) as init servers for UNIX. It is responsible for spawning
- a supplied set of other modules and gathering any log messages they may
- generate and routing them to the correct logging location. It also performs
- "aliveness" monitoring for all of the child modules it spawns, resetting any
- module that has hung (and logging it), as defined by not getting PONG
- messages back from a module that's been sent a PING message through the IPC
- hub. This provides a sanity check that will log (for debugging/improvement)
- any crashed process, but will also respawn it to maintain maximum system
- functionality.
- Module Files: (these files live in the bin directory)
- client_supervisor (the binary executable)
- -------------------
- Module Name: IPC Hub
- Module Function:
- This module serves as a communication hub for all of the other
- modules to send notifications, requests, and data structures to one another
- in an efficient manner. It provides a UNIX domain socket in /tmp which
- client processes can connect to and then subscribe to mailboxes, as well as
- send messages to mailboxes. Every message sent to a mailbox gets delivered
- to each process with an active subscription to that mailbox. This module
- also provides a wiretap feature which allows a debug client to attach to a
- running system and watch the messages as they flow through the hub allowing
- live trouble shooting.
- Module Files:
- /tmp/commhub (UNIX domain socket to which clients connect)
- ipc_server (this is the executable for this module)
- debug_client (this is the wiretap client for live debug)
- -------------------
- Module Name: Billing Database Client
- Module Function:
- This module collects submissions of billing and diagnostic log
- messages from other modules through its IPC mailbox and stores them in a
- transaction synchronous local database. When an SSH tunnel is available to
- the central server, it will attempt to flush any message that hasn't yet
- been confirmed by the server, retransmitting as needed.
- Module Files:
- billing.mem (mmap()-able file containing database of log entries)
- billdb (billing database client)
- -------------------
- Module Name: Pass Database Client
- Module Function:
- This module maintains a transaction synchronous local database of
- riders (rider ID, Magstripe, RFID, Rule, Rule Parameter) which is kept up to
- date with the server whenever there is an SSH tunnel available.
- This module also listens to the mailboxes for incoming credentials
- from the passenger interface unit and looks them up in the database. If a
- rider record is found for that credential, the associated rule is applied
- which will generate a billing log entry (and possibly passenger interface
- and driver interface messages).
- Module Files:
- passes.mem (mmap()-able file containing database of riders)
- passdb (buspass database client)
- init.scm (library initialization for scheme interpreter)
- rules.scm (scheme definitions for rules attached to riders)
- -------------------
- Module Name: Passenger Interface Unit
- Module Function:
- This module communicates with the Passenger Interface Unit connected
- by serial port and reports any credential presentation events to the
- appropriate mailbox on the IPC hub. This module also listens to a mailbox
- on the IPC hub for commands instructing it to update the text on the
- passenger facing display.
- Module Files:
- piu_minder (executable file for PIU module)
- -------------------
- Module Name: AVLS Client
- Module Function:
- This module provides Automatic Vehicle Location Service data to the
- server as connectivity allows, sending the current vehicle location,
- heading, velocity, and information about who is logged in and what route is
- being driven to the server whenever there is an SSH tunnel available.
- Module Files:
- avls (executable for AVLS client)
- --------------------------------------------------
- Server Side Modules
- --------------------------------------------------
- Module Name: Bus Pass Server
- Module Function:
- This module responds to client busses when they ask for rider and
- pass updates. It maintains a unique sequence number for each update and
- when requested gathers a list of the latest change to each rider after any
- given sequence number. This constitutes enough information to bring a
- client up to date. If a client is too far out of date, or if the client
- requests it explicitly, the server will send a ZFLUSH command, followed by a
- compressed list of all valid riders, followed by a ZFLUSHDONE command. This
- allows a stale client to efficiently get to an up-to-date state.
- -------------------
- Module Name: Billing Log Server
- Module Function:
- This module responds to a client's submitted log entry (billing or
- diagnostic log) by responding with (ACK, DUP, or IGN) messages followed by
- the MD5 checksum of the submitted message. This response allows the client
- to be sure that the message has been logged in the central database, and may
- therefore be purged from the local database where storage space is at a
- premium.
|