def process(proc_data):
    """
    Final processing to conform to the schema.

    Parameters:

        proc_data:   (dictionary) raw structured data to process

    Returns:

        List of dictionaries. Structured data with the following schema:

        [
          {
            "name":             string,
            "flags":            integer,
            "state": [
                                string
            ],
            "mtu":              integer,
            "ipv4_addr":        string,
            "ipv4_mask":        string,
            "ipv4_bcast":       string,
            "ipv6_addr":        string,
            "ipv6_mask":        integer,
            "ipv6_scope":       string,
            "mac_addr":         string,
            "type":             string,
            "rx_packets":       integer,
            "rx_bytes":         integer,
            "rx_errors":        integer,
            "rx_dropped":       integer,
            "rx_overruns":      integer,
            "rx_frame":         integer,
            "tx_packets":       integer,
            "tx_bytes":         integer,
            "tx_errors":        integer,
            "tx_dropped":       integer,
            "tx_overruns":      integer,
            "tx_carrier":       integer,
            "tx_collisions":    integer,
            "metric":           integer
          }
        ]
    """
    for entry in proc_data:
        int_list = ['flags', 'mtu', 'ipv6_mask', 'rx_packets', 'rx_bytes', 'rx_errors', 'rx_dropped', 'rx_overruns',
                    'rx_frame', 'tx_packets', 'tx_bytes', 'tx_errors', 'tx_dropped', 'tx_overruns', 'tx_carrier',
                    'tx_collisions', 'metric']
        for key in int_list:
            if key in entry:
                try:
                    key_int = int(entry[key])
                    entry[key] = key_int
                except (ValueError, TypeError):
                    entry[key] = None

        # convert OSX-style subnet mask to dotted quad
        if 'ipv4_mask' in entry:
            try:
                if entry['ipv4_mask'].find('0x') == 0:
                    new_mask = entry['ipv4_mask']
                    new_mask = new_mask.lstrip('0x')
                    new_mask = '.'.join(str(int(i, 16)) for i in [new_mask[i:i + 2] for i in range(0, len(new_mask), 2)])
                    entry['ipv4_mask'] = new_mask
            except (ValueError, TypeError, AttributeError):
                pass

        # convert state value to an array
        if 'state' in entry:
            try:
                new_state = entry['state'].split(',')
                entry['state'] = new_state
            except (ValueError, TypeError, AttributeError):
                pass

    return proc_data