.. | .. |
---|
165 | 165 | * leaving this function. |
---|
166 | 166 | */ |
---|
167 | 167 | ecu = j1939_ecu_get_by_name_locked(priv, name); |
---|
| 168 | + |
---|
| 169 | + if (ecu && ecu->addr == skcb->addr.sa) { |
---|
| 170 | + /* The ISO 11783-5 standard, in "4.5.2 - Address claim |
---|
| 171 | + * requirements", states: |
---|
| 172 | + * d) No CF shall begin, or resume, transmission on the |
---|
| 173 | + * network until 250 ms after it has successfully claimed |
---|
| 174 | + * an address except when responding to a request for |
---|
| 175 | + * address-claimed. |
---|
| 176 | + * |
---|
| 177 | + * But "Figure 6" and "Figure 7" in "4.5.4.2 - Address-claim |
---|
| 178 | + * prioritization" show that the CF begins the transmission |
---|
| 179 | + * after 250 ms from the first AC (address-claimed) message |
---|
| 180 | + * even if it sends another AC message during that time window |
---|
| 181 | + * to resolve the address contention with another CF. |
---|
| 182 | + * |
---|
| 183 | + * As stated in "4.4.2.3 - Address-claimed message": |
---|
| 184 | + * In order to successfully claim an address, the CF sending |
---|
| 185 | + * an address claimed message shall not receive a contending |
---|
| 186 | + * claim from another CF for at least 250 ms. |
---|
| 187 | + * |
---|
| 188 | + * As stated in "4.4.3.2 - NAME management (NM) message": |
---|
| 189 | + * 1) A commanding CF can |
---|
| 190 | + * d) request that a CF with a specified NAME transmit |
---|
| 191 | + * the address-claimed message with its current NAME. |
---|
| 192 | + * 2) A target CF shall |
---|
| 193 | + * d) send an address-claimed message in response to a |
---|
| 194 | + * request for a matching NAME |
---|
| 195 | + * |
---|
| 196 | + * Taking the above arguments into account, the 250 ms wait is |
---|
| 197 | + * requested only during network initialization. |
---|
| 198 | + * |
---|
| 199 | + * Do not restart the timer on AC message if both the NAME and |
---|
| 200 | + * the address match and so if the address has already been |
---|
| 201 | + * claimed (timer has expired) or the AC message has been sent |
---|
| 202 | + * to resolve the contention with another CF (timer is still |
---|
| 203 | + * running). |
---|
| 204 | + */ |
---|
| 205 | + goto out_ecu_put; |
---|
| 206 | + } |
---|
| 207 | + |
---|
168 | 208 | if (!ecu && j1939_address_is_unicast(skcb->addr.sa)) |
---|
169 | 209 | ecu = j1939_ecu_create_locked(priv, name); |
---|
170 | 210 | |
---|