Rahul Dahiya / Mbed OS STM32F7 Ethernet
Committer:
rahul_dahiya
Date:
Wed Jan 15 15:57:15 2020 +0530
Revision:
0:fb8047b156bb
STM32F7 LWIP

Who changed what in which revision?

UserRevisionLine numberNew 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 }