Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
mbed-os/features/netsocket/cellular/utils/APN_db.h@0:fb8047b156bb, 2020-01-15 (annotated)
- Committer:
- rahul_dahiya
- Date:
- Wed Jan 15 15:57:15 2020 +0530
- Revision:
- 0:fb8047b156bb
STM32F7 LWIP
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
rahul_dahiya |
0:fb8047b156bb | 1 | /* mbed Microcontroller Library |
rahul_dahiya |
0:fb8047b156bb | 2 | * Copyright (c) 2017 ublox, ARM Limited |
rahul_dahiya |
0:fb8047b156bb | 3 | * |
rahul_dahiya |
0:fb8047b156bb | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
rahul_dahiya |
0:fb8047b156bb | 5 | * you may not use this file except in compliance with the License. |
rahul_dahiya |
0:fb8047b156bb | 6 | * You may obtain a copy of the License at |
rahul_dahiya |
0:fb8047b156bb | 7 | * |
rahul_dahiya |
0:fb8047b156bb | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
rahul_dahiya |
0:fb8047b156bb | 9 | * |
rahul_dahiya |
0:fb8047b156bb | 10 | * Unless required by applicable law or agreed to in writing, software |
rahul_dahiya |
0:fb8047b156bb | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
rahul_dahiya |
0:fb8047b156bb | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
rahul_dahiya |
0:fb8047b156bb | 13 | * See the License for the specific language governing permissions and |
rahul_dahiya |
0:fb8047b156bb | 14 | * limitations under the License. |
rahul_dahiya |
0:fb8047b156bb | 15 | */ |
rahul_dahiya |
0:fb8047b156bb | 16 | |
rahul_dahiya |
0:fb8047b156bb | 17 | /* ---------------------------------------------------------------- |
rahul_dahiya |
0:fb8047b156bb | 18 | APN stands for Access Point Name, a setting on your modem or phone |
rahul_dahiya |
0:fb8047b156bb | 19 | that identifies an external network your phone can access for data |
rahul_dahiya |
0:fb8047b156bb | 20 | (e.g. 3G or 4G Internet service on your phone). |
rahul_dahiya |
0:fb8047b156bb | 21 | |
rahul_dahiya |
0:fb8047b156bb | 22 | The APN settings can be forced when calling the join function. |
rahul_dahiya |
0:fb8047b156bb | 23 | Below is a list of known APNs that us used if no apn config |
rahul_dahiya |
0:fb8047b156bb | 24 | is forced. This list could be extended by other settings. |
rahul_dahiya |
0:fb8047b156bb | 25 | |
rahul_dahiya |
0:fb8047b156bb | 26 | For further reading: |
rahul_dahiya |
0:fb8047b156bb | 27 | wiki apn: http://en.wikipedia.org/wiki/Access_Point_Name |
rahul_dahiya |
0:fb8047b156bb | 28 | wiki mcc/mnc: http://en.wikipedia.org/wiki/Mobile_country_code |
rahul_dahiya |
0:fb8047b156bb | 29 | google: https://www.google.de/search?q=APN+list |
rahul_dahiya |
0:fb8047b156bb | 30 | ---------------------------------------------------------------- */ |
rahul_dahiya |
0:fb8047b156bb | 31 | |
rahul_dahiya |
0:fb8047b156bb | 32 | /** |
rahul_dahiya |
0:fb8047b156bb | 33 | * Helper to generate the APN string |
rahul_dahiya |
0:fb8047b156bb | 34 | */ |
rahul_dahiya |
0:fb8047b156bb | 35 | #define _APN(apn,username,password) apn "\0" username "\0" password "\0" |
rahul_dahiya |
0:fb8047b156bb | 36 | |
rahul_dahiya |
0:fb8047b156bb | 37 | /** |
rahul_dahiya |
0:fb8047b156bb | 38 | * Helper to extract a field from the cfg string |
rahul_dahiya |
0:fb8047b156bb | 39 | */ |
rahul_dahiya |
0:fb8047b156bb | 40 | #define _APN_GET(cfg) \ |
rahul_dahiya |
0:fb8047b156bb | 41 | *cfg ? cfg : NULL; \ |
rahul_dahiya |
0:fb8047b156bb | 42 | cfg += strlen(cfg) + 1 |
rahul_dahiya |
0:fb8047b156bb | 43 | |
rahul_dahiya |
0:fb8047b156bb | 44 | /** |
rahul_dahiya |
0:fb8047b156bb | 45 | * APN lookup struct |
rahul_dahiya |
0:fb8047b156bb | 46 | */ |
rahul_dahiya |
0:fb8047b156bb | 47 | typedef struct { |
rahul_dahiya |
0:fb8047b156bb | 48 | const char* mccmnc; /**< mobile country code (MCC) and mobile network code MNC */ |
rahul_dahiya |
0:fb8047b156bb | 49 | const char* cfg; /**< APN configuartion string, use _APN macro to generate */ |
rahul_dahiya |
0:fb8047b156bb | 50 | } APN_t; |
rahul_dahiya |
0:fb8047b156bb | 51 | |
rahul_dahiya |
0:fb8047b156bb | 52 | /** |
rahul_dahiya |
0:fb8047b156bb | 53 | * Default APN settings used by many networks |
rahul_dahiya |
0:fb8047b156bb | 54 | */ |
rahul_dahiya |
0:fb8047b156bb | 55 | static const char* apndef = _APN("internet",,); |
rahul_dahiya |
0:fb8047b156bb | 56 | |
rahul_dahiya |
0:fb8047b156bb | 57 | /** |
rahul_dahiya |
0:fb8047b156bb | 58 | * List of special APNs for different network operators. |
rahul_dahiya |
0:fb8047b156bb | 59 | * |
rahul_dahiya |
0:fb8047b156bb | 60 | * No need to add default, "internet" will be used as a default if no entry matches. |
rahul_dahiya |
0:fb8047b156bb | 61 | * The APN without username/password have to be listed first. |
rahul_dahiya |
0:fb8047b156bb | 62 | */ |
rahul_dahiya |
0:fb8047b156bb | 63 | |
rahul_dahiya |
0:fb8047b156bb | 64 | static const APN_t apnlut[] = { |
rahul_dahiya |
0:fb8047b156bb | 65 | // MCC Country |
rahul_dahiya |
0:fb8047b156bb | 66 | // { /* Operator */ "MCC-MNC[,MNC]" _APN(APN,USERNAME,PASSWORD) }, |
rahul_dahiya |
0:fb8047b156bb | 67 | // MCC must be 3 digits |
rahul_dahiya |
0:fb8047b156bb | 68 | // MNC must be either 2 or 3 digits |
rahul_dahiya |
0:fb8047b156bb | 69 | // MCC must be separated by '-' from MNC, multiple MNC can be separated by ',' |
rahul_dahiya |
0:fb8047b156bb | 70 | |
rahul_dahiya |
0:fb8047b156bb | 71 | // 232 Austria - AUT |
rahul_dahiya |
0:fb8047b156bb | 72 | { /* T-Mobile */ "232-03", _APN("m2m.business",,) }, |
rahul_dahiya |
0:fb8047b156bb | 73 | |
rahul_dahiya |
0:fb8047b156bb | 74 | // 460 China - CN |
rahul_dahiya |
0:fb8047b156bb | 75 | { /* CN Mobile */"460-00", _APN("cmnet",,) |
rahul_dahiya |
0:fb8047b156bb | 76 | _APN("cmwap",,) }, |
rahul_dahiya |
0:fb8047b156bb | 77 | { /* Unicom */ "460-01", _APN("3gnet",,) |
rahul_dahiya |
0:fb8047b156bb | 78 | _APN("uninet","uninet","uninet") }, |
rahul_dahiya |
0:fb8047b156bb | 79 | |
rahul_dahiya |
0:fb8047b156bb | 80 | // 262 Germany - DE |
rahul_dahiya |
0:fb8047b156bb | 81 | { /* T-Mobile */ "262-01", _APN("internet.t-mobile","t-mobile","tm") }, |
rahul_dahiya |
0:fb8047b156bb | 82 | { /* T-Mobile */ "262-02,06", |
rahul_dahiya |
0:fb8047b156bb | 83 | _APN("m2m.business",,) }, |
rahul_dahiya |
0:fb8047b156bb | 84 | |
rahul_dahiya |
0:fb8047b156bb | 85 | // 222 Italy - IT |
rahul_dahiya |
0:fb8047b156bb | 86 | { /* TIM */ "222-01", _APN("ibox.tim.it",,) }, |
rahul_dahiya |
0:fb8047b156bb | 87 | { /* Vodafone */ "222-10", _APN("web.omnitel.it",,) }, |
rahul_dahiya |
0:fb8047b156bb | 88 | { /* Wind */ "222-88", _APN("internet.wind.biz",,) }, |
rahul_dahiya |
0:fb8047b156bb | 89 | |
rahul_dahiya |
0:fb8047b156bb | 90 | // 440 Japan - JP |
rahul_dahiya |
0:fb8047b156bb | 91 | { /* Softbank */ "440-04,06,20,40,41,42,43,44,45,46,47,48,90,91,92,93,94,95" |
rahul_dahiya |
0:fb8047b156bb | 92 | ",96,97,98" |
rahul_dahiya |
0:fb8047b156bb | 93 | _APN("open.softbank.ne.jp","opensoftbank","ebMNuX1FIHg9d3DA") |
rahul_dahiya |
0:fb8047b156bb | 94 | _APN("smile.world","dna1trop","so2t3k3m2a") }, |
rahul_dahiya |
0:fb8047b156bb | 95 | { /* NTTDoCoMo */"440-09,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27," |
rahul_dahiya |
0:fb8047b156bb | 96 | "28,29,30,31,32,33,34,35,36,37,38,39,58,59,60,61,62,63," |
rahul_dahiya |
0:fb8047b156bb | 97 | "64,65,66,67,68,69,87,99", |
rahul_dahiya |
0:fb8047b156bb | 98 | _APN("bmobilewap",,) /*BMobile*/ |
rahul_dahiya |
0:fb8047b156bb | 99 | _APN("mpr2.bizho.net","Mopera U",) /* DoCoMo */ |
rahul_dahiya |
0:fb8047b156bb | 100 | _APN("bmobile.ne.jp","bmobile@wifi2","bmobile") /*BMobile*/ }, |
rahul_dahiya |
0:fb8047b156bb | 101 | |
rahul_dahiya |
0:fb8047b156bb | 102 | // 204 Netherlands - NL |
rahul_dahiya |
0:fb8047b156bb | 103 | { /* Vodafone */ "204-04", _APN("public4.m2minternet.com",,) }, |
rahul_dahiya |
0:fb8047b156bb | 104 | |
rahul_dahiya |
0:fb8047b156bb | 105 | // 293 Slovenia - SI |
rahul_dahiya |
0:fb8047b156bb | 106 | { /* Si.mobil */ "293-40", _APN("internet.simobil.si",,) }, |
rahul_dahiya |
0:fb8047b156bb | 107 | { /* Tusmobil */ "293-70", _APN("internet.tusmobil.si",,) }, |
rahul_dahiya |
0:fb8047b156bb | 108 | |
rahul_dahiya |
0:fb8047b156bb | 109 | // 240 Sweden SE |
rahul_dahiya |
0:fb8047b156bb | 110 | { /* Telia */ "240-01", _APN("online.telia.se",,) }, |
rahul_dahiya |
0:fb8047b156bb | 111 | { /* Telenor */ "240-06,08", |
rahul_dahiya |
0:fb8047b156bb | 112 | _APN("services.telenor.se",,) }, |
rahul_dahiya |
0:fb8047b156bb | 113 | { /* Tele2 */ "240-07", _APN("mobileinternet.tele2.se",,) }, |
rahul_dahiya |
0:fb8047b156bb | 114 | |
rahul_dahiya |
0:fb8047b156bb | 115 | // 228 Switzerland - CH |
rahul_dahiya |
0:fb8047b156bb | 116 | { /* Swisscom */ "228-01", _APN("gprs.swisscom.ch",,) }, |
rahul_dahiya |
0:fb8047b156bb | 117 | { /* Orange */ "228-03", _APN("internet",,) /* contract */ |
rahul_dahiya |
0:fb8047b156bb | 118 | _APN("click",,) /* pre-pay */ }, |
rahul_dahiya |
0:fb8047b156bb | 119 | |
rahul_dahiya |
0:fb8047b156bb | 120 | // 234 United Kingdom - GB |
rahul_dahiya |
0:fb8047b156bb | 121 | { /* O2 */ "234-02,10,11", |
rahul_dahiya |
0:fb8047b156bb | 122 | _APN("mobile.o2.co.uk","faster","web") /* contract */ |
rahul_dahiya |
0:fb8047b156bb | 123 | _APN("mobile.o2.co.uk","bypass","web") /* pre-pay */ |
rahul_dahiya |
0:fb8047b156bb | 124 | _APN("payandgo.o2.co.uk","payandgo","payandgo") }, |
rahul_dahiya |
0:fb8047b156bb | 125 | { /* Vodafone */ "234-15", _APN("internet","web","web") /* contract */ |
rahul_dahiya |
0:fb8047b156bb | 126 | _APN("pp.vodafone.co.uk","wap","wap") /* pre-pay */ }, |
rahul_dahiya |
0:fb8047b156bb | 127 | { /* Three */ "234-20", _APN("three.co.uk",,) }, |
rahul_dahiya |
0:fb8047b156bb | 128 | { /* Jersey */ "234-50", _APN("jtm2m",,) /* as used on u-blox C030 U201 boards */ }, |
rahul_dahiya |
0:fb8047b156bb | 129 | |
rahul_dahiya |
0:fb8047b156bb | 130 | // 310 United States of America - US |
rahul_dahiya |
0:fb8047b156bb | 131 | { /* T-Mobile */ "310-026,260,490", |
rahul_dahiya |
0:fb8047b156bb | 132 | _APN("epc.tmobile.com",,) |
rahul_dahiya |
0:fb8047b156bb | 133 | _APN("fast.tmobile.com",,) /* LTE */ }, |
rahul_dahiya |
0:fb8047b156bb | 134 | { /* AT&T */ "310-030,150,170,260,410,560,680", |
rahul_dahiya |
0:fb8047b156bb | 135 | _APN("phone",,) |
rahul_dahiya |
0:fb8047b156bb | 136 | _APN("wap.cingular","WAP@CINGULARGPRS.COM","CINGULAR1") |
rahul_dahiya |
0:fb8047b156bb | 137 | _APN("isp.cingular","ISP@CINGULARGPRS.COM","CINGULAR1") }, |
rahul_dahiya |
0:fb8047b156bb | 138 | |
rahul_dahiya |
0:fb8047b156bb | 139 | // 901 International - INT |
rahul_dahiya |
0:fb8047b156bb | 140 | { /* Transatel */ "901-37", _APN("netgprs.com","tsl","tsl") }, |
rahul_dahiya |
0:fb8047b156bb | 141 | }; |
rahul_dahiya |
0:fb8047b156bb | 142 | |
rahul_dahiya |
0:fb8047b156bb | 143 | /** |
rahul_dahiya |
0:fb8047b156bb | 144 | * Configuring APN by extraction from IMSI and matching the table. |
rahul_dahiya |
0:fb8047b156bb | 145 | * |
rahul_dahiya |
0:fb8047b156bb | 146 | * @param imsi strinf containing IMSI |
rahul_dahiya |
0:fb8047b156bb | 147 | */ |
rahul_dahiya |
0:fb8047b156bb | 148 | inline const char* apnconfig(const char* imsi) |
rahul_dahiya |
0:fb8047b156bb | 149 | { |
rahul_dahiya |
0:fb8047b156bb | 150 | const char* config = NULL; |
rahul_dahiya |
0:fb8047b156bb | 151 | if (imsi && *imsi) { |
rahul_dahiya |
0:fb8047b156bb | 152 | // many carriers use internet without username and password, os use this as default |
rahul_dahiya |
0:fb8047b156bb | 153 | // now try to lookup the setting for our table |
rahul_dahiya |
0:fb8047b156bb | 154 | for (size_t i = 0; i < sizeof(apnlut)/sizeof(*apnlut) && !config; i ++) { |
rahul_dahiya |
0:fb8047b156bb | 155 | const char* p = apnlut[i].mccmnc; |
rahul_dahiya |
0:fb8047b156bb | 156 | // check the MCC |
rahul_dahiya |
0:fb8047b156bb | 157 | if ((0 == memcmp(imsi, p, 3))) { |
rahul_dahiya |
0:fb8047b156bb | 158 | p += 3; |
rahul_dahiya |
0:fb8047b156bb | 159 | // check all the MNC, MNC length can be 2 or 3 digits |
rahul_dahiya |
0:fb8047b156bb | 160 | while (((p[0] == '-') || (p[0] == ',')) && |
rahul_dahiya |
0:fb8047b156bb | 161 | (p[1] >= '0') && (p[1] <= '9') && |
rahul_dahiya |
0:fb8047b156bb | 162 | (p[2] >= '0') && (p[2] <= '9') && !config) { |
rahul_dahiya |
0:fb8047b156bb | 163 | int l = ((p[3] >= '0') && (p[3] <= '9')) ? 3 : 2; |
rahul_dahiya |
0:fb8047b156bb | 164 | if (0 == memcmp(imsi+3,p+1,l)) |
rahul_dahiya |
0:fb8047b156bb | 165 | config = apnlut[i].cfg; |
rahul_dahiya |
0:fb8047b156bb | 166 | p += 1 + l; |
rahul_dahiya |
0:fb8047b156bb | 167 | } |
rahul_dahiya |
0:fb8047b156bb | 168 | } |
rahul_dahiya |
0:fb8047b156bb | 169 | } |
rahul_dahiya |
0:fb8047b156bb | 170 | } |
rahul_dahiya |
0:fb8047b156bb | 171 | // use default if not found |
rahul_dahiya |
0:fb8047b156bb | 172 | if (!config) { |
rahul_dahiya |
0:fb8047b156bb | 173 | config = apndef; |
rahul_dahiya |
0:fb8047b156bb | 174 | } |
rahul_dahiya |
0:fb8047b156bb | 175 | return config; |
rahul_dahiya |
0:fb8047b156bb | 176 | } |