VMPS::Server - VLAN Membership Policy Server


VMPS-Server documentation Contained in the VMPS-Server distribution.

Index


Code Index:

NAME

Top

VMPS::Server - VLAN Membership Policy Server

This package implements a VMPS server. For more information on VMPS itself, consult the Cisco web site:

    http://www.cisco.com/

VERSION

Top

Version 0.04

SYNOPSIS

Top

    package My::VMPSServer;
    use base qw/VMPS::Server/;

    sub vmps_request{ ... }

    __PACKAGE__->run();

HANDLING REQUESTS

Top

vmps_request()

Child modules should implement the vmps_request method. The method should return a VMPS::Packet response object. The default behavior is to reject all requests. For more info, see VMPS::Packet.

    sub vmps_request {
        my ($this, $packet, $from_ip) = @_;
        ....
        return $packet->reply(...);
    }

DEFAULTS

Top

The module listens on the "vqp" port (1589/udp), on all interfaces.

CUSTOMIZING

Top

This module inherits its behavior from Net::Server. Sub-classes may implement any of the hooks/arguments from Net::Server in order to customize their behavior. For more information, see the documentation for Net::Server.

AUTHOR

Top

kevin brintnall, <kbrint at rufus.net>

ACKNOWLEDGEMENTS

Top

The packet handling code is based on VQP spec documentation from the OpenVMPS project. For more information, see:

    http://vmps.sourceforge.net/

COPYRIGHT & LICENSE

Top


VMPS-Server documentation Contained in the VMPS-Server distribution.
package VMPS::Server;
use base qw[ Net::Server::PreFork ];
use VMPS::Packet;

use warnings;
use strict;

our $VERSION = '0.04';


sub vmps_request {
    my ($this, $packet, $from_ip) = @_;
    return $packet->reject;
}

sub default_values {
    return {
        port => '1589',
        host => '*',
        proto => 'udp',
    }
}

#################################################################

sub process_request {
    my $this = shift;
    my $client = $this->{server}{client}->peerhost();
    my $dgram = $this->{server}{udp_data};

    my $request = eval { VMPS::Packet->_decode($dgram) };
    if ($@)
    {
        $this->log(1, "(Request from $client) $@");
        return;
    }

    eval {
        my $reply = $this->vmps_request($request, $client);

        $reply = $request->reject
            unless ($reply and UNIVERSAL::isa($reply, 'VMPS::Packet'));

        my $reply_pkt = $reply->_encode;
        $this->{server}{client}->send($reply_pkt);
    };
    if ($@)
    {
        $this->log(1, "(Reply to $client) $@");
        return;
    }
}

#################################################################

1; # End of VMPS::Server