def parse_content(self, content):
        """
        Parse the lines if the ``ip neighbor`` output.  Each line is split up
        into words on spaces, and must meet the following criteria:

        * there must be at least two words on the line
        * the first word must be a valid IP (v4 or v6) address
        * the last word must be a valid Neighbour Unreachability Detection state
        * the remaining words must be in pairs - these are then combined into
          key-value pairs for a dictionary.

        Each line is then stored in a dictionary by the address (as a string).
        The address as parsed by the ``ipaddress`` module is stored in the
        ``addr`` item in the dictionary, for convenience.
        """
        self.data = {}
        self.unparsed_lines = []
        for line in filter(None, content):
            split_result = line.split()
            # Need at least IP address, something, and reachability
            if len(split_result) < 2:
                self.unparsed_lines.append({
                    'line': line,
                    'reason': "not enough words"
                })
                continue
            # Total words needs to be even: beginning + 2*keyvals + ending
            if len(split_result) % 2 == 1:
                self.unparsed_lines.append({
                    'line': line,
                    'reason': "odd number of words"
                })
                continue
            # Don't parse this line if the first thing isn't an
            # IP address
            try:
                addr = ipaddress.ip_address(six.u(split_result[0]))
            except ValueError:
                self.unparsed_lines.append({
                    'line': line,
                    'reason': "can't convert address '" + split_result[0] + "'"
                })
                continue
            # Don't parse this line if the last item doesn't seem to be a
            # neighbour unreachability state
            if split_result[-1] not in self.VALID_NUD_STATES:
                self.unparsed_lines.append({
                    'line': line,
                    'reason': split_result[-1] + " is not a valid state"
                })
                continue

            # OK, good to go, split everything in the middle up
            key_value_content = split_result[1:-1]
            if len(key_value_content) >= 2:
                entry = dict((k, v) for k, v in zip(key_value_content[0::2],
                                                    key_value_content[1::2]))
            else:
                entry = {}
            entry["nud"] = split_result[-1]
            entry['addr'] = addr  # save the object
            self.data[split_result[0]] = entry
Parse the lines if the ``ip neighbor`` output.  Each line is split up
        into words on spaces, and must meet the following criteria:

        * there must be at least two words on the line
        * the first word must be a valid IP (v4 or v6) address
        * the last word must be a valid Neighbour Unreachability Detection state
        * the remaining words must be in pairs - these are then combined into
          key-value pairs for a dictionary.

        Each line is then stored in a dictionary by the address (as a string).
        The address as parsed by the ``ipaddress`` module is stored in the
        ``addr`` item in the dictionary, for convenience.