예제 #1
0
파일: models.py 프로젝트: aloktiagi/SDN-IVN
class NetworkSwitch(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    swid = db.Column(db.String(50), unique=True)

    links = db.relationship('SwitchLink',
                            primaryjoin=id == SwitchLink.srcswitch_id,
                            lazy='dynamic')

    def __init__(self, swid):
        self.swid = swid

    def __repr__(self):
        return '<NetworkSwitch %r>' % self.swid

    # Returns a list of tuples (<neighbor>, <port>, <cost>) where:
    #   - <neighbor> is a NetworkSwitch instance representing the neighbor
    #   - <port> is the number of current switch's port that is connected to
    #       <neighbor>
    #   - <cost> is the cost of the link for Dijkstra's algorithm

    def getneighborlinks(self, returnquery=False):
        query = self.links.filter_by(dsthost_id=None)
        return query if returnquery else query.all()

    def getneighbors(self):
        return [(l.dstswitch, l.srcswitch_port, l.cost)
                for l in self.getneighborlinks()]

    def gethostlinks(self, returnquery=False):
        query = self.links.filter_by(dstswitch_id=None)
        return query if returnquery else query.all()

    def gethosts(self):
        return [(l.dsthost, l.srcswitch_port, l.cost)
                for l in self.gethostlinks()]
예제 #2
0
파일: models.py 프로젝트: aloktiagi/SDN-IVN
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(50), unique=True)
    password = db.Column(db.String(50), unique=False)

    status_id = db.Column(db.Integer,
                          db.ForeignKey('user_status.id'),
                          default=1)

    authorizednetworks = db.relationship('NetworkAccess', lazy='dynamic')

    sessions = db.relationship('UserSession', lazy='dynamic')

    def __init__(self, username=None, password=None):
        self.username = username
        self.password = password

    def __repr__(self):
        return '<User %r>' % (self.username)

    # is_authenticated(), is_active(), is_anonymous(), get_id() are required
    # for use with flask-login
    def is_authenticated(self):
        return len(self.sessions.filter_by(endtime=None).all()) > 0

    def is_active(self):
        return True

    def is_anonymous(self):
        return False

    def get_id(self):
        return unicode(self.id)
예제 #3
0
파일: models.py 프로젝트: aloktiagi/SDN-IVN
class UserStatus(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    description = db.Column(db.String(20), unique=True)

    users = db.relationship('User', backref='status', lazy='dynamic')

    def __init__(self, description):
        self.description = description

    def __repr__(self):
        return '<UserStatus %r>' % self.description
예제 #4
0
파일: models.py 프로젝트: aloktiagi/SDN-IVN
class NetworkAccess(db.Model):
    id = db.Column(db.Integer, primary_key=True)

    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

    virtualnetwork_id = db.Column(db.Integer,
                                  db.ForeignKey('virtual_network.id'))

    virtualnetworkhost_id = db.Column(db.Integer,
                                      db.ForeignKey('virtual_network_host.id'))

    virtualnetwork = db.relationship('VirtualNetwork', uselist=False)

    active = db.Column(db.Boolean)

    def __init__(self, user_id, vnetwork_id, vhost_id=None, active=False):
        self.user_id = user_id
        self.virtualnetwork_id = vnetwork_id
        self.virtualnetworkhost_id = vhost_id
        self.active = active
예제 #5
0
파일: models.py 프로젝트: aloktiagi/SDN-IVN
class UserSession(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    physicalhost_id = db.Column(db.Integer,
                                db.ForeignKey('physical_network_host.id'))
    starttime = db.Column(db.DateTime, default=datetime.utcnow)
    endtime = db.Column(db.DateTime)
    lastactivity = db.Column(db.DateTime)

    user = db.relationship('User', uselist=False)
    physicalhost = db.relationship('PhysicalNetworkHost', uselist=False)
    virtualhosts = db.relationship('VirtualNetworkHost', lazy='dynamic')

    def __init__(self, userid, hostid, start=now(), end=None, lastact=None):
        self.user_id = userid
        self.physicalhost_id = hostid
        self.starttime = start
        self.endtime = end
        self.lastactivity = lastact

    def __repr__(self):
        return '<UserSession %r>' % self.id

    def is_active(self):
        return self.endtime is None
예제 #6
0
파일: models.py 프로젝트: aloktiagi/SDN-IVN
class PhysicalNetworkHost(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    mac = db.Column(db.String(17), unique=True)
    ip = db.Column(db.String(15), unique=True)

    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    user = db.relationship('User', backref='physicalhost', uselist=False)

    virtualhosts = db.relationship('VirtualNetworkHost', lazy='dynamic')
    '''
    switch_id = db.Column(db.Integer, db.ForeignKey('network_switch.id'))
    switch_port = db.Column(db.Integer)
    switch = db.relationship('NetworkSwitch', uselist=False)
    '''

    # def __init__(self, mac, ip, switch, port, user=None):
    def __init__(self, mac, ip, user=None):
        self.mac = mac
        self.ip = ip
        self.user = user

    def __repr__(self):
        return '<PhysicalNetworkHost %r>' % self.mac
예제 #7
0
파일: models.py 프로젝트: aloktiagi/SDN-IVN
class VirtualNetwork(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    vNetID = db.Column(db.String(32), unique=True)
    vlan = db.Column(db.Integer, unique=True)
    cidr = db.Column(db.String(18))

    hosts = db.relationship('VirtualNetworkHost',
                            backref='virtualnetwork',
                            lazy='dynamic')

    def __init__(self, vNetID, vlan, cidr):
        self.vNetID = vNetID
        self.vlan = vlan

        # TODO: cidr validation (make sure networks don't overlap, etc)
        self.cidr = cidr

    def __repr__(self):
        return ('<VirtualNetwork vNetID: %r, VLAN: %d, CIDR: %r' %
                (self.vNetID, self.vlan, self.cidr))

    def generateIP(self):
        network = IPSet(IPNetwork(self.cidr))
        network.remove(min(network))
        network.remove(max(network))
        hostlist = IPSet([h.ip for h in self.hosts.all()])
        available = network - hostlist
        return min(available)
        '''
        for host in hosts.all():
            if(ipToInteger(host.ip) > maxIp):
                maxIp = ipToInteger(host.ipAddr)
        return integerToIp(maxIp+1)
        '''

    '''
예제 #8
0
파일: models.py 프로젝트: aloktiagi/SDN-IVN
class SwitchLink(db.Model):

    __table_args__ = (db.UniqueConstraint('srcswitch_id', 'srcswitch_port'), )

    id = db.Column(db.Integer, primary_key=True)
    srcswitch_id = db.Column(db.Integer, db.ForeignKey('network_switch.id'))
    srcswitch_port = db.Column(db.Integer)
    dstswitch_id = db.Column(db.Integer, db.ForeignKey('network_switch.id'))
    dsthost_id = db.Column(db.Integer,
                           db.ForeignKey('physical_network_host.id'))
    capacity = db.Column(db.Integer)
    cost = db.Column(db.Integer)

    dsthost = db.relationship('PhysicalNetworkHost', uselist=False)

    dstswitch = db.relationship('NetworkSwitch',
                                foreign_keys=[dstswitch_id],
                                uselist=False)

    def __init__(self,
                 src_id,
                 src_port,
                 dst_id,
                 dsttype='switch',
                 capacity=-1,
                 cost=1):

        if dsttype not in ('switch', 'host'):
            raise Exception('Invalid dsttype')

        self.srcswitch_id = src_id
        self.srcswitch_port = src_port
        self.dstswitch_id = dst_id if dsttype == 'switch' else None
        self.dsthost_id = dst_id if dsttype == 'host' else None
        self.capacity = capacity
        self.cost = cost

    def __repr__(self):
        format = "SwitchLink %r:\n" \
               + "\tsrcswitch_id: %r\n\tsrcswitch_port: %r\n" \
               + "\tdstswitch_id: %r\n\tdsthost_id: %r\n\n"
        return format % (self.id, self.srcswitch_id, self.srcswitch_port,
                         self.dstswitch_id, self.dsthost_id)
예제 #9
0
파일: models.py 프로젝트: aloktiagi/SDN-IVN
class VirtualNetworkHost(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    mac = db.Column(db.String(17), unique=True)
    ip = db.Column(db.String(15), unique=True)

    physicalhost_id = db.Column(db.Integer,
                                db.ForeignKey('physical_network_host.id'))
    physicalhost = db.relationship('PhysicalNetworkHost', uselist=False)

    usersession_id = db.Column(db.Integer, db.ForeignKey('user_session.id'))
    usersession = db.relationship('UserSession', uselist=False)

    virtualnetwork_id = db.Column(db.Integer,
                                  db.ForeignKey('virtual_network.id'))

    def __init__(self, mac, ip, physicalhost_id, vnetwork_id, session_id):
        self.mac = mac
        self.ip = ip
        self.physicalhost_id = physicalhost_id
        self.virtualnetwork_id = vnetwork_id
        self.usersession_id = session_id

    def __repr__(self):
        return '<VirtualNetworkHost %r>' % self.mac