### Summary

If a network interface is named 'primary', the current set of `ip addr` commands issued by module_utils/facts/network/linux.py will not give the desired results, resulting in wrong ansible facts.

The fix seems very simple, instead of:
```
args = [ip_path, 'addr', 'show', 'primary', device]
...
args = [ip_path, 'addr', 'show', 'secondary', device]
```

We can do:
```
args = [ip_path, 'addr', 'show', 'primary', 'dev', device]
...
args = [ip_path, 'addr', 'show', 'secondary', 'dev', device]
```

By adding "dev" keyword, then it makes it clear that `ip addr` command should return data from that specific device, regardless of whether the device name conflicts with another `ip addr show` keyword (such as "primary", "secondary", "deprecated", "dadfailed", "temporary", etc)


### Issue Type

Bug Report

### Component Name

facts

### Ansible Version

```console
$ ansible --version

ansible [core 2.11.8] 
  config file = None
  configured module search path = ['/Users/rob.muir/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /Users/rob.muir/workspace/geos/build/.env/lib/python3.9/site-packages/ansible
  ansible collection location = /Users/rob.muir/.ansible/collections:/usr/share/ansible/collections
  executable location = /Users/rob.muir/workspace/geos/build/.env/bin/ansible
  python version = 3.9.1 (default, Dec 28 2020, 11:24:06) [Clang 12.0.0 (clang-1200.0.32.28)]
  jinja version = 3.1.1
  libyaml = False
```


### Configuration

```console
$ ansible-config dump --only-changed
<no output>
```


### OS / Environment

MacOS X controller, Centos 7 host

### Steps to Reproduce

<!--- Paste example playbooks or commands between quotes below -->
```
# Add network interface named "primary"
ip link add primary type dummy
# Add some IP addresses to the device to test discovery
ip address add 192.168.50.1/24 dev primary
ip address add 192.168.50.2/24 dev primary
ip address add 192.168.51.1/24 dev primary
# set interface "UP"
ip link set primary up
# discover facts
```


### Expected Results

Expect ansible to discover IP addresses (both primary and secondary) correctly,.
```
ok: [test] => {
    "hostvars": {
        "test": {
            "ansible_all_ipv4_addresses": [
                "192.168.50.1",
                "192.168.51.1",
                "192.168.50.2",
                "10.0.2.15"
            ],
```

### Actual Results

```console
Unfortunately, today any actual secondary addresses will be missing. Also there will be duplicates, which happens because the interface name collides with a special keyword to `ip address show` and because we arent supplying `dev` to make it unambiguous:

ok: [test] => {
    "hostvars": {
        "test": {
            "ansible_all_ipv4_addresses": [
                "10.0.2.15",
                "192.168.50.1",
                "192.168.51.1",
                "10.0.2.15",
                "192.168.50.1",
                "192.168.51.1",
                "10.0.2.15"
            ],
```
```


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
#
#
#
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import glob
import os
import re
import socket
import struct
from ansible.module_utils.facts.network.base import Network, NetworkCollector
from ansible.module_utils.facts.utils import get_file_content
class LinuxNetwork(Network):
    """
    This is a Linux-specific subclass of Network.  It defines
    - interfaces (a list of interface names)
    - interface_<name> dictionary of ipv4, ipv6, and mac address information.
    - all_ipv4_addresses and all_ipv6_addresses: lists of all configured addresses.
    - ipv4_address and ipv6_address: the first non-local address for each family.
    """
    platform = 'Linux'
    INTERFACE_TYPE = {
        '1': 'ether',
        '32': 'infiniband',
        '512': 'ppp',
        '772': 'loopback',
        '65534': 'tunnel',
    }
    def populate(self, collected_facts=None):