Re: [lp-wan] ACK compression

"Pascal Thubert (pthubert)" <pthubert@cisco.com> Mon, 19 August 2019 08:13 UTC

Return-Path: <pthubert@cisco.com>
X-Original-To: lp-wan@ietfa.amsl.com
Delivered-To: lp-wan@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id C5B83120110 for <lp-wan@ietfa.amsl.com>; Mon, 19 Aug 2019 01:13:12 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -14.5
X-Spam-Level:
X-Spam-Status: No, score=-14.5 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_HI=-5, SPF_PASS=-0.001, USER_IN_DEF_DKIM_WL=-7.5] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=cisco.com header.b=MuVCH93G; dkim=pass (1024-bit key) header.d=cisco.onmicrosoft.com header.b=MYhPPNvN
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id FvrShYgwv8Zu for <lp-wan@ietfa.amsl.com>; Mon, 19 Aug 2019 01:13:10 -0700 (PDT)
Received: from alln-iport-8.cisco.com (alln-iport-8.cisco.com [173.37.142.95]) (using TLSv1.2 with cipher DHE-RSA-SEED-SHA (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id DE24B120072 for <lp-wan@ietf.org>; Mon, 19 Aug 2019 01:13:09 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=cisco.com; i=@cisco.com; l=37479; q=dns/txt; s=iport; t=1566202389; x=1567411989; h=from:to:subject:date:message-id:references:in-reply-to: mime-version; bh=NVdmUMxj1RYUdgX1u6PdQcFlvx1xK8ROZ/ktBJGmkz4=; b=MuVCH93G1bkrUCK6drTfqWntypRCZuIt18duPznm22Yz1TMfXP9VZlU4 WHqT+Cc7zwNDXdDB6iahyPVrkXtxpDmCk2Kmsw+UqxyHigcNi/p5Gabfz kegZxVcasFYYnVP3Wu9JZCm3vDqcGcxnMRhxigPXkEr+Wdzvr8r1ceDiE E=;
IronPort-PHdr: 9a23:erh1DRzAZLIIEyzXCy+N+z0EezQntrPoPwUc9psgjfdUf7+++4j5YhWN/u1j2VnOW4iTq+lJjebbqejBYSQB+t7A1RJKa5lQT1kAgMQSkRYnBZudFU3mJvPwcwQxHd9JUxlu+HToeUU=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: A0DlAABSWVpd/4ENJK1kGgEBAQEBAgEBAQEHAgEBAQGBZ4EWLyQsA21VIAQLKodmA4p4TYIPfo8IEYdOgUKBEANUCQEBAQwBAR8OAgEBgSqDFQKDIiM4EwIFAQEEAQEDAQYEbYUnDIVKAQEBAQMSFQYTAQEHMQ8CAQgOAwQBASEBBgcyFAkIAQEEARIIGoMBgR1NAx0BAp18AoE4iGGBcjOCegEBBYUMGIIUCYE0hHSGdReBQD+BEUaCFzU+glaBNgQBARIBGwYsCIMHgiaMKQwKh2V/YU+GU44vCQKCHYtlgmKGDYIxhzCEGIpLjVqMQoEzihYCBAIEBQIOAQEFgWchZ3FwFYMnCYI5CRqDT4pTcoEpig8PFwSCKAEB
X-IronPort-AV: E=Sophos;i="5.64,403,1559520000"; d="scan'208,217";a="313532876"
Received: from alln-core-9.cisco.com ([173.36.13.129]) by alln-iport-8.cisco.com with ESMTP/TLS/DHE-RSA-SEED-SHA; 19 Aug 2019 08:13:04 +0000
Received: from XCH-RCD-001.cisco.com (xch-rcd-001.cisco.com [173.37.102.11]) by alln-core-9.cisco.com (8.15.2/8.15.2) with ESMTPS id x7J8D4Is017410 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=FAIL); Mon, 19 Aug 2019 08:13:04 GMT
Received: from xhs-rcd-002.cisco.com (173.37.227.247) by XCH-RCD-001.cisco.com (173.37.102.11) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Mon, 19 Aug 2019 03:13:03 -0500
Received: from xhs-rtp-002.cisco.com (64.101.210.229) by xhs-rcd-002.cisco.com (173.37.227.247) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Mon, 19 Aug 2019 03:13:03 -0500
Received: from NAM01-BY2-obe.outbound.protection.outlook.com (64.101.32.56) by xhs-rtp-002.cisco.com (64.101.210.229) with Microsoft SMTP Server (TLS) id 15.0.1473.3 via Frontend Transport; Mon, 19 Aug 2019 04:13:02 -0400
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RxPWm+Q9Njn07uGU5lfJaZ1rBPXbSRy5Ji08pmdCKyO8vuZW3GMC+4/pOpb0unff9R58/kIiEZENIJKPmWD/7mcheIKSRBCIgn68ZhCb3eA+kiRpNsg1DxGCqETD2PSHizF5b08Zph9vIn22TslaVf4Ahi5t0eSZHU5MyehRX5jy1qhnO+7tX671r0UM8ycuZMyswVSfTI/Z7++t34/0Y5HZlMUd/AiKjmY01dKFS8421oNE0qYNZ9LkmlzWJOnRmknsMHWYZw1BbFSN/cyqxvAYrOZs9SCR4gZjo9lMpkBhA2fVIWEpd6deji9SPMgBOeDGMqMhUSqkWg069IPEoA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=aceHCGOIu0oklYbHjHA1I2FtiqbBJPoJzUAVvHeF8Ow=; b=TzEVAyT0YhAzJ0Ch/JTXG73pFV9kzdNXijPmTQQNmUw32jGxYv50AXhHn45ON2m61v2V66Z2S7r93OoxL/3VfiToWgceklAqLciY8AGqtJFb9SMT2aEMT06Bt6ICXmUpUA0YisvemM4TCZnAcQO/gVyiVmeksluI3HT3Sh60NGCI7I+rtYwdJZSmT48dOWKpWZVt4/ZY39Lwtc/NMidpevu5TnylIKo+i+PAG6RpHu7M9o8H2RKmydyHiuF29PO+enJ+o7q6Qg4xHK7S7q3s5lxEBVEaWYS594/Hs8JhnlM+A7lAwVsaGad8JUd6hS+FxAhNZKNl1Iox26xwf977/w==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=cisco.com; dmarc=pass action=none header.from=cisco.com; dkim=pass header.d=cisco.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cisco.onmicrosoft.com; s=selector2-cisco-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=aceHCGOIu0oklYbHjHA1I2FtiqbBJPoJzUAVvHeF8Ow=; b=MYhPPNvN8A3gSS6O6gF6BKu8AuEhInm5RJVk4unV9DFJNncMQTcovtXrkF2UiQAo0Gk4SjUEbUwAweX8+9SOh76tOzjYWAUbK5LtfxxNh4Ab3PyRJpqfQQ8er+lheZapSwKhZbpNVE+wAwpNbYj6IN3aRa17Dgk5LqWwbLEHQzw=
Received: from MN2PR11MB3565.namprd11.prod.outlook.com (20.178.250.159) by MN2PR11MB4496.namprd11.prod.outlook.com (52.135.38.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2178.18; Mon, 19 Aug 2019 08:13:01 +0000
Received: from MN2PR11MB3565.namprd11.prod.outlook.com ([fe80::89cf:9d:8a75:266e]) by MN2PR11MB3565.namprd11.prod.outlook.com ([fe80::89cf:9d:8a75:266e%3]) with mapi id 15.20.2178.018; Mon, 19 Aug 2019 08:13:01 +0000
From: "Pascal Thubert (pthubert)" <pthubert@cisco.com>
To: Olivier Gimenez <ogimenez@semtech.com>, "lp-wan@ietf.org" <lp-wan@ietf.org>
Thread-Topic: ACK compression
Thread-Index: AdUE7aZN8HG1sFipRdueWi+g9sViUxRc3wGAAAEATWA=
Date: Mon, 19 Aug 2019 08:12:34 +0000
Deferred-Delivery: Mon, 19 Aug 2019 08:12:16 +0000
Message-ID: <MN2PR11MB356504C46948F56F314C1BB2D8A80@MN2PR11MB3565.namprd11.prod.outlook.com>
References: <5af4d5c1c10946cb826be465b79e0980@semtech.com>
In-Reply-To: <5af4d5c1c10946cb826be465b79e0980@semtech.com>
Accept-Language: fr-FR, en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
authentication-results: spf=none (sender IP is ) smtp.mailfrom=pthubert@cisco.com;
x-originating-ip: [2001:420:44f3:1300:8170:98a7:7988:d19d]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 18c3e9dc-a261-4ef1-a0b5-08d7247d0da8
x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(2017052603328)(7193020); SRVR:MN2PR11MB4496;
x-ms-traffictypediagnostic: MN2PR11MB4496:
x-ms-exchange-purlcount: 3
x-microsoft-antispam-prvs: <MN2PR11MB4496FCF657DD2E6213D7E33FD8A80@MN2PR11MB4496.namprd11.prod.outlook.com>
x-ms-oob-tlc-oobclassifiers: OLM:10000;
x-forefront-prvs: 0134AD334F
x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(366004)(136003)(396003)(39860400002)(376002)(346002)(189003)(199004)(52054003)(606006)(102836004)(53546011)(99286004)(186003)(3480700005)(66574012)(2906002)(14444005)(256004)(71190400001)(71200400001)(33656002)(6506007)(229853002)(6666004)(6246003)(478600001)(53936002)(7736002)(74316002)(2501003)(486006)(7116003)(25786009)(46003)(446003)(11346002)(110136005)(14454004)(476003)(316002)(790700001)(6436002)(9686003)(221733001)(236005)(55016002)(7696005)(6306002)(86362001)(54896002)(81166006)(52536014)(66946007)(8936002)(8676002)(81156014)(76116006)(66556008)(6116002)(66446008)(64756008)(76176011)(5660300002)(66476007); DIR:OUT; SFP:1101; SCL:1; SRVR:MN2PR11MB4496; H:MN2PR11MB3565.namprd11.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1;
received-spf: None (protection.outlook.com: cisco.com does not designate permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: Mi5QKpAKohQAsZJS09N3EuE6kSAT+ptzAYTzgaRnPWld5FDAoiqNOgAP1Dmc6XJ+CYpIG6C9mvZxdv9pj3DDkoZyU5dYv/eJ0UpSWAcWZPkiz9A6kV4pBS1AMRUoRA46z2mIbd/Gxyk2dC2/n1E+mHu9G4eylDaIvGNkxXDsTjxBhvxVgu1511IK5vRByEOieixBvHyWqX2EAhMRS8bruM3EF9oRwCe4iq4eLwEEmoBPWPnC7Ag1twP/89uQHbTA2QDFeajbz8laTIRDcLnFrkRQC7xsTsbphtk8U+iA9baYpvd7gbYZE7ShN5hTd37hDICqX9gB7/e2iTDV3DYayd2gc0Bi208/5eHO5q0PZVEceZklzxBCcejpifa1y0SVlV5nN/0QkNiwwLQb1AU4AxhO+M3kxiypV7ev2joN/K4=
x-ms-exchange-transport-forked: True
Content-Type: multipart/alternative; boundary="_000_MN2PR11MB356504C46948F56F314C1BB2D8A80MN2PR11MB3565namp_"
MIME-Version: 1.0
X-MS-Exchange-CrossTenant-Network-Message-Id: 18c3e9dc-a261-4ef1-a0b5-08d7247d0da8
X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Aug 2019 08:13:01.3422 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 5ae1af62-9505-4097-a69a-c1553ef7840e
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: pZmYy+PTuZljFqPt0KQgpld1ihTAAfxg4J6i650osK/fuwnuDbHeszRDijUr+ChmKp0O+7PduU/XWp7snVP4nQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR11MB4496
X-OriginatorOrg: cisco.com
X-Outbound-SMTP-Client: 173.37.102.11, xch-rcd-001.cisco.com
X-Outbound-Node: alln-core-9.cisco.com
Archived-At: <https://mailarchive.ietf.org/arch/msg/lp-wan/Co8UHats0nn8_TfJo28hPuxIABQ>
Subject: Re: [lp-wan] ACK compression
X-BeenThere: lp-wan@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: "Low-Power Wide Area Networking \(LP-WAN\), also known as LPWA or Low-Rate WAN \(LR-WAN\)" <lp-wan.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/lp-wan>, <mailto:lp-wan-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/lp-wan/>
List-Post: <mailto:lp-wan@ietf.org>
List-Help: <mailto:lp-wan-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/lp-wan>, <mailto:lp-wan-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 19 Aug 2019 08:13:13 -0000

Hello Olivier:

The drawings do not align well and the number of bits do not correspond so I cannot read your examples properly.
All I can say is that in order to work, you need the last bit of the compressed form to be the same as the elided bits.
So your "While the scissors are not on an L2 Word" in step 4 will not give the appropriate result if the scissor is already on the word boundary. In that case you need to go to the next boundary.
I suggest a step 3.5 which is to move the scissors right after the first while series.

All the best,

Pascal

From: lp-wan <lp-wan-bounces@ietf.org> On Behalf Of Olivier Gimenez
Sent: lundi 19 août 2019 09:56
To: lp-wan@ietf.org
Subject: Re: [lp-wan] ACK compression

Dear,

It has not been a lot of discussion on that topic, here is my proposition. My changes are underlined and in italic (3rd bullet of first paragraph, added 3 figures)

Please see my first email, quoted at the end of my email for the context.


Best regards
Olivier

8.3.2.1.  Bitmap Compression

   For transmission, the Compressed Bitmap in the SCHC ACK message is
   defined by the following algorithm (see Figure 16 for a follow-along
   example):


  *   Build a temporary SCHC ACK message that contains the Header followed by the original Bitmap (see Section 8.2.2.3 for a description of Bitmaps).
  *   Position scissors at the end of the Bitmap, after its last bit.
  *   While the bit on the left of the scissors is the same than the last SCHC bit and belongs to the Bitmap, keep moving left, then stop.  When this is done,
  *   While the scissors are not on an L2 Word boundary of the SCHC ACK  message and there is a Bitmap bit on the right of the scissors,  keep moving right, then stop.
  *   At this point, cut and drop off any bits to the right of the scissors

   When one or more bits have effectively been dropped off as a result
   of the above algorithm, the SCHC ACK message is a multiple of L2
   Words, no padding bits will be appended.

Because the SCHC Fragment sender knows the size of the original
   Bitmap, it can reconstruct the original Bitmap from the Compressed
   Bitmap received in the SCH ACK message.

   Figure 16 shows an example where L2 Words are actually bytes and
   where the original Bitmap contains 17 bits, the last 15 of which are
   all set to 1.

   |---- SCHC ACK Header ----|--------      Bitmap     --------|
             |-- T --|-M-| 1 |
   +--- ... -+- ... -+---+---+---------------------------------+
   | Rule ID |  DTag | W |C=0|1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1|
   +--- ... -+- ... -+---+---+---------------------------------+
           next L2 Word boundary ->|

            Figure 16: SCHC ACK Header plus uncompressed Bitmap - Trailing 1 compression

   Figure 17 shows that the last 14 bits are not sent.

   |---- SCHC ACK Header ----|CpBmp|
             |-- T --|-M-| 1 |
   +--- ... -+- ... -+---+---+-----+
   | Rule ID |  DTag | W |C=0|1 0 1|
   +--- ... -+- ... -+---+---+-----+
           next L2 Word boundary ->|

       Figure 17: Resulting SCHC ACK message with Compressed Bitmap - Trailing 1 compression

   Figure 18 shows an example of a SCHC ACK with tile indices ranging
   from 6 down to 0, where the Bitmap indicates that the second and the
   fourth tile of the window have not been correctly received.

   |---- SCHC ACK Header ----|--- Bitmap --|
             |-- T --|-M-| 1 |6 5 4 3 2 1 0| (tile #)
   +---------+-------+---+---+-------------+
   | Rule ID |  DTag | W |C=0|1 0 1 0 1 1 1|      uncompressed Bitmap
   +---------+-------+---+---+-------------+
       next L2 Word boundary ->|<-- L2 Word -->|

   +---------+-------+---+---+-------------+~~~+
   | Rule ID |  DTag | W |C=0|1 0 1 0 1 1 1|Pad|  transmitted SCHC ACK
   +---------+-------+---+---+-------------+~~~+
       next L2 Word boundary ->|<-- L2 Word -->|

          Figure 18: Example of a SCHC ACK message, missing tiles


   Figure 19 shows an example of a SCHC ACK with FCN ranging from 6 down
   to 0, where integrity check has not been performed or has failed and
   the Bitmap indicates that there is no missing tile in that window.

   |---- SCHC ACK Header ----|--- Bitmap --|
             |-- T --|-M-| 1 |6 5 4 3 2 1 0| (tile #)
   +---------+-------+---+---+-------------+
   | Rule ID |  DTag | W |C=0|1 1 1 1 1 1 1|  with uncompressed Bitmap
   +---------+-------+---+---+-------------+
       next L2 Word boundary ->|

   +--- ... -+- ... -+---+---+-+
   | Rule ID |  DTag | W |C=0|1|                  transmitted SCHC ACK
   +--- ... -+- ... -+---+---+-+
       next L2 Word boundary ->|

         Figure 19: Example of a SCHC ACK message, no missing tile



   Figure 20 shows an example where L2 Words are actually bytes and where the original Bitmap contains 17 bits, the last 6 of which are all set to 0 due to missing tiles.

   |---- SCHC ACK Header ----|--------      Bitmap     --------|
             |-- T --|-M-| 1 |
   +--- ... -+- ... -+---+---+---------------------------------+
   | Rule ID |  DTag | W |C=0|1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0|
   +--- ... -+- ... -+---+---+---------------------------------+
           next L2 Word boundary ->|

            Figure 20: SCHC ACK Header plus uncompressed Bitmap - Trailing 0 compression

   Figure 21 shows that the last 6 bits are not sent.

   |---- SCHC ACK Header ----|CpBmp|
             |-- T --|-M-| 1 |
   +--- ... -+- ... -+---+---+-----+
   | Rule ID |  DTag | W |C=0|1 1 1 1 1 1 1 1 1 1 1 1 |
   +--- ... -+- ... -+---+---+-----+
           next L2 Word boundary ->|

       Figure 21: Resulting SCHC ACK message with Compressed Bitmap - Trailing 0 compression




From: Olivier Gimenez
Sent: 07 May 2019 18:15
To: lp-wan@ietf.org<mailto:lp-wan@ietf.org>
Subject: ACK compression

Dear,

In the discussion following the draft-ietf-lpwan-schc-over-lorawan v04 with Dominique Barthel we are wondering if an improvement can be made:
In the LoRaWAN profile, from device to SCHC gateway, we tried to minimise the number of windows in order to minimise the number of required downlinks. This has a side effect:  bitmap can be up to 16 bytes.

Let's assume that the profile does not allow to put the last tile in the all-1 message.
Fragment 1:   | ruleId=b'000000 | Dtag=b'0 | W= b'00 | FCN=126 | 4 tiles |               => Receiver's bitmap b'1111 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
Fragment 2:   | ruleId=b'000000 | Dtag=b'0 | W= b'00 | FCN=122 | 4 tiles |               => Lost, receiver's bitmap stays unchanged
Fragment 3:   | ruleId=b'000000 | Dtag=b'0 | W= b'00 | FCN=118 | 4 tiles |               => Received, receiver's bitmap becomes b'1111 0000 1111 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
Fragment 4:   | ruleId=b'000000 | Dtag=b'0 | W= b'00 | FCN=114 | 4 tiles |                  => Lost, receiver's bitmap stays unchanged
Fragment 5 - All 1:   | ruleId=b'000000 | Dtag=b'0 | W= b'00 | FCN=127 | MIC |         => Received, MIC is wrong, receiver returns ACK
ACK :                | ruleId=b'000000 | Dtag=b'0 | W= b'00 | C=0 | bitmap = b'1111 0000 1111 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 | => Compression will not reduce the bitmap size in this case

What we are thinking is to allow compression of trailing bits also for 0 with the same rule than 1, which will result in the ACK:
Compressed ACK :                | ruleId=b'000000 | Dtag=b'0 | W= b'00 | C=0 | bitmap = b'1111 0000 1111 00

The sender knows how many tiles have been send, so it can resend tiles 122->119 and 114>111. What are your thoughts ?

Thank you

Best regards
Olivier

To view our privacy policy, including the types of personal information we collect, process and share, and the rights and options you have in this respect, see www.semtech.com/legal<http://www.semtech.com/legal>.