option name = "metronetwork";
option app_label = "metronetwork";

message MetroNetworkSystem (XOSBase){
     option verbose_name = "Metro Network System";

     required string name = 1 [db_index = False, max_length = 256, null = False, blank = False];
     required string description = 2 [db_index = False, max_length = 1024, null = False, blank = False];
     required string restUrl = 3 [db_index = False, max_length = 256, null = False, blank = False];
     required string administrativeState = 4 [default = "disabled", choices = "(('enabled', 'Enabled'), ('disabled', 'Disabled'))", max_length = 16, blank = False, null = False, db_index = False];
     required string operationalState = 5 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('active', 'Active'), ('inactive', 'Inactive'))"];
}

message NetworkDevice (XOSBase){
     option verbose_name = "Network Device";

     optional string name = 1 [help_text = "Device friendly name", max_length = 20, null = True, db_index = False, blank = True];
     required string restCtrlUrl = 2 [db_index = False, max_length = 256, null = False, blank = False];
     required string authType = 3 [blank = False, max_length = 16, null = False, db_index = False, choices = "(('basic', 'Basic'), ('key', 'Key'), ('oauth', 'OAuth'))"];
     required string username = 4 [db_index = False, max_length = 32, null = False, blank = True];
     required string password = 5 [db_index = False, max_length = 32, null = False, blank = True];
     required string administrativeState = 6 [default = "disabled", choices = "(('enabled', 'Enabled'), ('disabled', 'Disabled'), ('syncrequested', 'SyncRequested'), ('syncinprogress', 'SyncInProgress'))", max_length = 16, blank = False, null = False, db_index = False];
}

message NetworkEdgePort (XOSBase){
     option verbose_name = "Network Edge Port";

     required manytoone element->NetworkDevice:networkedgeport = 1 [db_index = True, null = False, blank = False];
     required string pid = 2 [db_index = False, max_length = 256, null = False, blank = False];
     required int32 bwpCfgCbs = 3 [db_index = False, null = False, blank = True];
     required int32 bwpCfgEbs = 4 [db_index = False, null = False, blank = True];
     required int32 bwpCfgCir = 5 [db_index = False, null = False, blank = True];
     required int32 bwpCfgEir = 6 [db_index = False, null = False, blank = True];
     required string name = 7 [db_index = False, max_length = 256, null = False, blank = True];
     required string location = 8 [db_index = False, max_length = 256, null = False, blank = True];
     required string latlng = 9 [db_index = False, max_length = 50, null = False, blank = True];
}


message NetworkEdgeToEdgePointConnection (Service){
     option verbose_name = "E-Line Service";

     required string sid = 1 [db_index = False, max_length = 256, null = False, blank = True];
     required string type = 2 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('direct', 'Direct'), ('tunnel', 'Tunnel'), ('optical', 'Optical'), ('virtual', 'Virtual'), ('Point_To_Point', 'Point To Point'))"];
     required string vlanid = 3 [db_index = False, max_length = 64, null = False, blank = False];
     required manytoone uni1->NetworkEdgePort:EdgePointToEdgePointSrc = 4 [db_index = True, null = False, blank = False];
     required manytoone uni2->NetworkEdgePort:EdgePointToEdgePointDst = 5 [db_index = True, null = False, blank = False];
     required string operstate = 6 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('active', 'Active'), ('inactive', 'Inactive'))"];
     required string adminstate = 7 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('disabled', 'Disabled'), ('activationrequested', 'ActivationRequested'), ('enabled', 'Enabled'), ('invalid', 'Invalid'), ('deactivationrequested', 'DeactivationRequested'))"];
}


message NetworkEdgeToMultipointConnection (Service){
     option verbose_name = "E-Line Service";

     required string sid = 1 [db_index = False, max_length = 256, null = False, blank = True];
     required string type = 2 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('vlan', 'VLAN'), ('ip', 'IP'), ('ethernet', 'Ethernet'), ('Root_Multipoint', 'Root Multipoint'))"];
     required string vlanid = 3 [db_index = False, max_length = 64, null = False, blank = False];
     required manytoone root->NetworkEdgePort:EdgeToMultipointRoot = 4 [db_index = True, null = False, blank = False];
     required string operstate = 5 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('active', 'Active'), ('inactive', 'Inactive'))"];
     required string adminstate = 6 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('disabled', 'Disabled'), ('activationrequested', 'ActivationRequested'), ('enabled', 'Enabled'), ('invalid', 'Invalid'), ('deactivationrequested', 'DeactivationRequested'))"];
     required manytomany eps->NetworkEdgePort/NetworkMultipointToMultipointConnection_eps:networkedgetomultipointconnection_eps = 7 [db_index = False, null = False, blank = False];
}


message NetworkMultipointToMultipointConnection (Service){
     option verbose_name = "E-LAN Service";

     required string sid = 1 [db_index = False, max_length = 256, null = False, blank = True];
     required string type = 2 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('vlan', 'VLAN'), ('ip', 'IP'), ('ethernet', 'Ethernet'), ('Multipoint_To_Multipoint', 'Multipoint To Multipoint'))"];
     required string vlanid = 3 [db_index = False, max_length = 64, null = False, blank = False];
     required string operstate = 4 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('active', 'Active'), ('inactive', 'Inactive'))"];
     required string adminstate = 5 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('disabled', 'Disabled'), ('activationrequested', 'ActivationRequested'), ('enabled', 'Enabled'), ('invalid', 'Invalid'), ('deactivationrequested', 'DeactivationRequested'))"];
     required manytomany eps->NetworkEdgePort/NetworkMultipointToMultipointConnection_eps:networkmultipointtomultipointconnection_eps = 6 [db_index = False, null = False, blank = False];
}

message BandwidthProfile (XOSBase){
     option verbose_name = "Bandwidth Profile";

     required int32 bwpcfgcbs = 1 [db_index = False, null = False, blank = False];
     required int32 bwpcfgebs = 2 [db_index = False, null = False, blank = False];
     required int32 bwpcfgcir = 3 [db_index = False, null = False, blank = False];
     required int32 bwpcfgeir = 4 [db_index = False, null = False, blank = False];
     required string name = 5 [db_index = False, max_length = 256, null = False, blank = False];
}

message RemotePort (XOSBase){
     option verbose_name = "Remote Port";

     required manytoone remoteportsite->Site:RemotePortSite = 1 [db_index = True, null = False, blank = False];
     required manytoone edgeport->NetworkEdgePort:RemotePortEdgePort = 2 [db_index = True, null = False, blank = False];
     required string name = 3 [db_index = False, max_length = 256, null = False, blank = False];
}


message ServiceSpoke (XOSBase){
     option verbose_name = "Service Spoke";

     required manytoone vnodlocalsite->Site:VnodLocalSite = 1 [db_index = True, null = False, blank = False];
     required manytoone vnodlocalport->RemotePort:VnodLocalPort = 2 [db_index = True, null = False, blank = False];
     required string name = 3 [db_index = False, max_length = 256, null = False, blank = False];
     required string remotesubscriber = 4 [db_index = False, max_length = 256, null = False, blank = True];
     required string remotevnodid = 5 [db_index = False, max_length = 256, null = False, blank = True];
     required bool autoattached = 6 [default = False, null = False, db_index = False, blank = True];
     required string operstate = 7 [default = "inactive", choices = "(('active', 'Active'), ('inactive', 'Inactive'))", max_length = 256, blank = False, null = False, db_index = False];
     required string adminstate = 8 [default = "disabled", choices = "(('disabled', 'Disabled'), ('configured', 'Configured'), ('impaired', 'Impaired'), ('enabled', 'Enabled'))", max_length = 64, blank = False, null = False, db_index = False];
}

message VnodGlobalService (Service){
     option verbose_name = "Virtual Network On Demand Global Service"; 

     required string servicehandle = 1 [db_index = False, max_length = 64, null = False, blank = False];
     required string vlanid = 2 [db_index = False, max_length = 64, null = False, blank = False];
     required string type = 3 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('eline', 'E-Line Service'), ('elan', 'E-LAN Service'), ('etree', 'E-Tree Service'))"];
     optional manytoone metronetworkroottomultipoint->NetworkEdgeToMultipointConnection:EtreeService = 4 [db_index = True, null = True, blank = False];
     optional manytoone metronetworkmultipoint->NetworkMultipointToMultipointConnection:ElanService = 5 [db_index = True, null = True, blank = False];
     optional manytoone metronetworkpointtopoint->NetworkEdgeToEdgePointConnection:ElineService = 6 [db_index = True, null = True, blank = False];
     required string operstate = 7 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('active', 'Active'), ('inactive', 'Inactive'))"];
     required string adminstate = 8 [default = "enabled", choices = "(('disabled', 'Disabled'), ('activationrequested', 'ActivationRequested'), ('enabled', 'Enabled'), ('invalid', 'Invalid'), ('deactivationrequested', 'DeactivationRequested'))", max_length = 256, blank = False, null = False, db_index = False];
     required manytoone bandwidthProfile->BandwidthProfile:BandwidthProfile = 9 [db_index = True, null = False, blank = False];
     required manytomany spokes->ServiceSpoke/VnodGlobalService_spokes:ServiceSpokes = 10 [db_index = False, null = False, blank = False];
}

message UserNetworkInterface (XOSBase){
     option verbose_name = "User Network Interface"; 

     required int32 enabled = 1 [db_index = False, null = False, blank = False];
     required int32 capacity = 2 [db_index = False, null = False, blank = False];
     required int32 bw_used = 3 [db_index = False, null = False, blank = False];
     required string vlanIds = 4 [db_index = False, max_length = 256, null = False, blank = False];
     required string location = 5 [db_index = False, max_length = 256, null = False, blank = True];
     required string latlng = 6 [db_index = False, max_length = 50, null = False, blank = True];
     required string name = 7 [db_index = False, max_length = 256, null = False, blank = False];
}



