blob: b9df5e5d78c40ab488230428bfd672a5579a6958 [file] [log] [blame]
//
// Copyright (C) 2014 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
syntax = "proto2";
option optimize_for = LITE_RUNTIME;
package shill.mobile_operator_db;
message Filter {
// A filter can be one of the following types.
enum Type {
IMSI = 1;
ICCID = 2;
SID = 3;
OPERATOR_NAME = 4;
MCCMNC = 5;
};
required Type type = 1;
// A regular expression specifying the values that are *accepted* by this
// filter. The field to be tested is chosen by the |type|.
// The regular expression should be specified as an extended POSIX regular
// expression.
required string regex = 2;
}
message LocalizedName {
required string name = 1;
// Language is specified with two letter language codes. See xml:lang.
// If missing, language is assumed to be "en".
optional string language = 2;
}
message MobileAPN {
required string apn = 1;
enum Plan {
PREPAID = 1;
POSTPAID = 2;
}
repeated Plan plan = 2;
repeated LocalizedName localized_name = 3;
optional string gateway = 4;
optional string username = 5;
optional string password = 6;
repeated string dns = 7;
}
message OnlinePortal {
enum Method {
GET = 1;
POST = 2;
}
// Some OnlinePortals are only valid for a restricted set of SIDs/MCCMNCs etc.
// Use this filter to restrict when the OnlinePortal is valid.
// The OnlinePortal is assumed to be valid if the filter is not provided.
optional Filter olp_filter = 1;
required Method method = 2;
required string url = 3;
optional string post_data = 4;
}
message Data {
// A unique identifier for this M[V]NO.
required string uuid = 1;
enum ProviderType {
GSM = 1;
CDMA = 2;
}
optional ProviderType provider_type = 2;
optional string country = 3;
// List of localized names for this provider.
// If provided, the first is chosen as the default.
repeated LocalizedName localized_name = 4;
// Indicates that this provider requires roaming and the customer is not
// charged additional for roaming. This is particularly useful for some MVNOs.
optional bool requires_roaming = 5 [default = false];
repeated OnlinePortal olp = 6;
// ///////////////////////////////////////////////////////////////////////////
// GSM specific properties [21 - 40]
// MCCMNC is the concatenation of MCC and MNC.
// MCC is a three digit ITU E.212 Mobile Country Code (e.g. '310' or '409')
// and MNC is a two or three digit GSM Mobile Network Code.
repeated string mccmnc = 21;
repeated MobileAPN mobile_apn = 22;
// ///////////////////////////////////////////////////////////////////////////
// CDMA specific properties [41-60]
repeated string sid = 41;
repeated string nid = 42;
optional string activation_code = 43;
}
message MobileVirtualNetworkOperator {
repeated Filter mvno_filter = 1;
// The data provided in an MVNO is used to augment the data provided by its
// MNO.
// - All provided top-level fields in |MobileVirtualNetworkOperator::data|
// *replace* the corresponding top-level fields in
// |MobileNetworkOperator::data|. No attempt is made to merge lists etc.
// - |international_mvno| is handled in the same way. The base MNO is
// determined by the particular mccmnc value.
required Data data = 2;
}
message MobileNetworkOperator {
required Data data = 1;
repeated MobileVirtualNetworkOperator mvno = 2;
// The database inevitably contains some duplicate MobileNetworkOperators that
// are impossible to distinguish using MCCMNC/name. In such a case, this bool
// may be set to pick out one of the duplicates as the intended operator.
// Note that if you're using this property, you should DTRT, and find out why
// there is an ambiguous entry in the database.
// TODO(pprabhu): Add a presubmit-hook to ensure that no more than one of the
// duplicates is earmarked.
optional bool earmarked = 3;
}
message InternationalMobileVirtualNetworkOperator {
// An InternationalMobileVirtualNetworkOperator is provided for mere
// convenience. When the database is loaded, an MVNO is added to each of the
// MNO this international MVNO belongs to.
// - |mccmnc| values are used to add the MVNO under corresponding MNOs.
// - Additionally, the |mccmnc| value is used to create a Filter that is
// applied *before* any other filters in the MVNOs.
//
// Currently, we do not support associating the IMVNO with different MNOs
// through any other data (like the operator name).
repeated string mccmnc = 1;
required MobileVirtualNetworkOperator mvno = 15;
}
// Top-level message.
// The Database is a single message of type |MobileOperatorDB|.
message MobileOperatorDB {
repeated MobileNetworkOperator mno = 1;
repeated InternationalMobileVirtualNetworkOperator imvno = 2;
}