Corba-MMIMS
Left Up Right Corbammims

Dialup-Manager

Zweck

Ein schwäbischer Unternehmer möchte nicht, daß ungewollt Verbindungen ins Internet aufgebaut werden. Man möchte auch nicht, daß jeder als Superuser auf dem Gateway das wählen steuert. Zudem soll das ganze ohne Kenntnisse bedienbar sein.

Modern ist die Steuerung per WWW-Interface. Besser und universeller ist unser

Dialupmanager
mit der universellen
CORBA-Schnittstelle
Ein weiteres Problem ist das Versenden und Abholen von Mails. Dazu haben gibt es den
Queuemanager
Bis der CORBA-Sicherheitsdienst erforscht ist, soll das ganze nur für kleine Netze (Kleine Firmen und Privatnutzung) sein, wo jeder im Netz die Dienste nutzen kann.

Interface

#include"mico/CosEventChannelAdmin.idl"
#pragma prefix ""
module DialupManager
{

    exception Syserr
    {
	long errnr;
	string errmsg;
    };

   interface Device
   {
       string name();           // liefert Name
       string desc();           // liefert Beschreibung
   };
 
   typedef string ipstring;

    // Für isdn und ähnliches
   interface DialDevice : Device
   {
       enum DialMode {off,manual,automatic,permanent };
       enum Status   {offline,incoming,outgoing};

       void dial()
	   raises(Syserr);
       void hangup()
	   raises(Syserr);
       void setdialmode(in DialMode d)
	   raises(Syserr);
       void activate()
	   raises(Syserr);
       void deactivate()
	   raises(Syserr);
       DialMode getdialmode()
	   raises(Syserr);
       Status getstatus()
	   raises(Syserr);
       ipstring get_our_ip()
	   raises(Syserr);
       ipstring get_peer_ip()
	   raises(Syserr);
       long activechannels()   //Aktive ISDN-Kanäle
	   raises(Syserr);
       CosEventChannelAdmin::EventChannel geteventchannel()
	   raises(Syserr);
   };

   struct dmstate
   {
       DialDevice::DialMode dm;
       DialDevice::Status   status;
   };

   /* fuer CTI */
   typedef string Telefonnumber; 
   struct call
   {
      Telefonnumber remote;
      Telefonnumber local;
   };

   // Für Mail, UUCP, und dergleichen
   typedef string Entrydesc;    // Beschreibung
   typedef sequence  EntrydescList;

   interface QueueentryIterator;

   interface Queuemanager
   {
       string name();           // liefert Name
       string desc();           // liefert Beschreibung
       void fetchandsend()
	   raises(Syserr);
       long howmanyentries()
           raises(Syserr);
       void listentries(in unsigned long howmany,
			out EntrydescList list,
			out QueueentryIterator queit)
	   raises(Syserr);
   };

   interface QueueentryIterator
   {
       boolean next_one(out Entrydesc entry);
       boolean next_n(in unsigned long how_many, 
                   out EntrydescList bl);
       void destroy();
   };
};

Dokumentation

Die Netzwerkinterfaces werden durch das Lesen von /proc/net/dev erkannt und als Objektid in einem POA behandelt. Im Nameserver werden sie in einem Namingkontext bekanntgegeben.

Eventchannel-Anbindung:

Nun kann man auch die Netzwerkseitige IP-Adresse des überwachten Interfaces mit get_our_ip bekommen.
A C H T U N G: bei PPP-Verbindungen dauert das eine Weile, bis die Verbindung aufgebaut ist und die IP-Adresse ausgehandelt wurde. In der Zwischenzeit ist noch die alte IP-Adresse gesetzt und wird zurückgeliefert. Clients sollten daher eine kleine Zeit nochmals die Adresse erfragen.

Da der Dialupmanager auf Devices im Betreibssystem aufpassen muß, wird er als persistenter Server d.h. eigenständig und nicht von einem POA oder BOA Mediator aus gestartet. Damit kann er auch gleich

Einfaches CTI

Mit unserem speziellen CTI-Device bekommt unser Dialupmanager mit, wenn ein Telefonanruf eingeht.
Daraus erzeugt er ein Ereignis über einen speziellen Eventchannel. Damit können dann beliebige Clients auf das Ereignis reagieren.

Mittels filternden Eventchannels ergeben sich weitere Möglichkeiten.

Sonstiges

Konfiguration

Zur Compilezeit

Pfade in config.h eintragen: Die Pfade sollten mit /-abgeschlossen sein, wenn man sie leer läßt, werden die Dateien im aktuellen Verzeichnis gesucht.

Device-Beschreibungsdatei

Jedem Device ist eine Beschreibungsdatei, die genau so heißt wie das Device, zugeordnet.
In der ersten Zeile steht die Beschreibung, die bei desc zurückgeliefert wird. Während dem Betrieb wird an der zweiten Zeile die IOR des verbundenen Eventchannels dort hinterlegt.

Nameservice

Der Dialupmanager richtet in dem CORBA-Nameserver, den er via ORB::resolve_initial_references findet, einen Namingcontext namens DialupManager, ein, wo er seine Interfaces und das Consumeradmininterface (IDL:omg.org/CosEventChannelAdmin/ConsumerAdmin:1.0) des cti-Eventchannel mit dem Namen cti ein.

Er erwartet einen Eintrag syslog, wo der Syslog-Eventchannel mit dem Typ IDL:omg.org/CosEventChannelAdmin/ConsumerAdmin:1.0 sich dahinter verbirgt.

weitere Ideen

Graphische Oberfläche

qtdialmonitor url
überwacht ein Dialdevice. Url ist die iiopname oder iioploc-URL oder die IOR

Zu tun

Andere Arbeiten

isdnlog bei Isdn4Linux
Neben der Gebürenauswertung können auch bei verschiedenen Isdn-Ereignissen Programme gestartet werden. Daneben gibt es über Sockets angebunden Monitorclients

Vielleicht wäre es vernünftig, einen ORB mit C-Mapping zu nehmen und über das isdnlog die dialupmanager-Sachen einzubauen.
Allerdings hat isdnlog wohl ein echter Programmierer geschrieben, man braucht wirklich Talent um durchzublicken.
Die Überlegung war, Isdnlog in C++/CORBA zu reengineeren (z.B. sollten die Tarifabhängigen Sachen vom Monitoring getrennt werden).
Ideen:

Nach tagelangen Plagen habe ich mich dann doch zu einem eigenen Device entschlossen und habe damit mal Kern-Programmierung gemacht.

Dld-Winclients (entdeckt von Stefan Hanser)
können betriebssystemübergreifend Isdn-Devices auf Linux kontrollieren
Dialcontrol (entdeckt von Walter Jäger)
DialMon (entdeckt von Walter Jäger)

Rudolf Weber Informatik- und Netzwerkverein Ravensburg e.V