The old function could get confused by short-hand IPv6 notation (using ::)
and mistake them for MAC addresses. The new code is more strict; it will
correctly handle all short-hand addresses, and will return an error when
an address has trailing garbage instead of ignoring it.