From mboxrd@z Thu Jan 1 00:00:00 1970 From: Olliver Schinagl Date: Tue, 26 Jan 2016 17:36:42 +0100 Subject: [U-Boot] [PATCH v2 5/5] tools: Add tool to add crc8 to a mac address In-Reply-To: References: <1450096872-16733-1-git-send-email-o.schinagl@ultimaker.com> <1450096872-16733-6-git-send-email-o.schinagl@ultimaker.com> <56A79E65.9020901@ultimaker.com> Message-ID: <56A7A09A.1080905@ultimaker.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hey Joe, On 26-01-16 17:31, Joe Hershberger wrote: > On Tue, Jan 26, 2016 at 10:27 AM, Olliver Schinagl > wrote: >> Hey Joe, >> >> >> On 26-01-16 01:45, Joe Hershberger wrote: >>> On Mon, Dec 14, 2015 at 6:41 AM, Olliver Schinagl >>> wrote: >>>> This patch adds a little tool that takes a generic MAC address and >>>> generates a CRC byte for it. The output is the full MAC address without >>>> any separators, ready written into an EEPROM. >>>> >>>> Signed-off-by: Olliver Schinagl >>>> --- >>>> tools/Makefile | 4 ++++ >>>> tools/gen_mac_addr.c | 51 >>>> +++++++++++++++++++++++++++++++++++++++++++++++++++ >>>> 2 files changed, 55 insertions(+) >>>> create mode 100644 tools/gen_mac_addr.c >>>> >>>> diff --git a/tools/Makefile b/tools/Makefile >>>> index 4a50744..6191c26 100644 >>>> --- a/tools/Makefile >>>> +++ b/tools/Makefile >>>> @@ -43,6 +43,10 @@ envcrc-objs := envcrc.o lib/crc32.o >>>> common/env_embedded.o lib/sha1.o >>>> hostprogs-$(CONFIG_CMD_NET) += gen_eth_addr >>>> HOSTCFLAGS_gen_eth_addr.o := -pedantic >>>> >>>> +hostprogs-$(CONFIG_CMD_NET) += gen_mac_addr >>>> +gen_mac_addr-objs := gen_mac_addr.o lib/crc8.o >>>> +HOSTCFLAGS_gen_mac_addr.o := -pedantic >>>> + >>>> hostprogs-$(CONFIG_CMD_LOADS) += img2srec >>>> HOSTCFLAGS_img2srec.o := -pedantic >>>> >>>> diff --git a/tools/gen_mac_addr.c b/tools/gen_mac_addr.c >>>> new file mode 100644 >>>> index 0000000..bd8688f >>>> --- /dev/null >>>> +++ b/tools/gen_mac_addr.c >>> This is not "generating a mac address", right? Its point is to create >>> a CRC for the user-supplied MAC address. >>> >>> Perhaps a better name would be "gen_ethaddr_rom_crc". >> Yes, it takes a mac address as input and generates a macaddress + crc as >> output. >> >> e.g. 11:22:33:44:55:66 -> 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0xcc >> >> But maybe it should get some flags to output either both (as described here) >> or just the crc based on the input, and then a few flags to either output it >> in hex format or as an int? > What ever features you think will be useful for the users of this dev > board I guess. I'm not sure if this is a platform (the included > eeprom) that would carry over into other products. Why not? It just reads a mac address and generates a crc8-appended mac address (or just the crc8) everybody that uses a mac address to be stored somewhere (even if the env is pre-generated) could use this. I don't think it is limited to our platform since it does something very generic. > >>>> @@ -0,0 +1,51 @@ >>>> +/* >>>> + * (C) Copyright 2016 >>>> + * Olliver Schinagl >>>> + * >>>> + * SPDX-License-Identifier: GPL-2.0+ >>>> + */ >>>> + >>>> +#include >>>> +#include >>>> +#include >>>> +#include >>>> +#include >>>> +#include >>>> + >>>> + >>>> +int main(int argc, char *argv[]) >>>> +{ >>>> + uint_fast8_t i; >>>> + uint8_t mac_addr[7] = { 0x00 }; >>>> + >>>> + if (argc < 2) { >>>> + puts("Please supply a MAC address."); >>>> + return -1; >>>> + } >>>> + >>>> + if (!((strlen(argv[1]) == 12) || (strlen(argv[1]) == 17))) { >>>> + puts("Please supply a valid MAC address with optionaly\n" >>>> + "dashes (-) or colons (:) as seperators."); >>>> + return -1; >>>> + } >>> You could use the eth_validate_ethaddr_str() function here instead of this >>> code. >> A right, well when I first wrote this, I think this didn't exist there yet. >> I'll replace it and use it instead. >>> >>>> + >>>> + i = 0; >>>> + while (*argv[1] != '\0') { >>>> + char nibble[2] = { 0x00, '\n' }; /* for strtol */ >>>> + >>>> + nibble[0] = *argv[1]++; >>>> + if (isxdigit(nibble[0])) { >>>> + if (isupper(nibble[0])) >>>> + nibble[0] = tolower(nibble[0]); >>>> + mac_addr[i >> 1] |= strtol(nibble, NULL, 16) << >>>> ((i % 2) ? 0 : 4) & ((i % 2) ? 0x0f : 0xf0); >>>> + i++; >>>> + } >>>> + } >>> Instead of all this you could just compile in (maybe it already is?) >>> the eth_parse_enetaddr() function that U-Boot uses for this very >>> purpose. >> I'll see if I can have access to this function and then rewrite this to use >> that. >> >>>> + mac_addr[6] = crc8(mac_addr, 6); >>>> + >>>> + for (i = 0; i < 7; i++) >>>> + printf("%.2x", mac_addr[i]); >>>> + putchar('\n'); >>>> + >>>> + return 0; >>>> +} >>>> -- >>>> 2.6.2 >>>> >>>> _______________________________________________ >>>> U-Boot mailing list >>>> U-Boot at lists.denx.de >>>> http://lists.denx.de/mailman/listinfo/u-boot >> >> -- >> Met vriendelijke groeten, Kind regards, ?????? >> >> Olliver Schinagl >> Software Engineer >> Research & Development >> Ultimaker B.V. >> -- Met vriendelijke groeten, Kind regards, ?????? Olliver Schinagl Software Engineer Research & Development Ultimaker B.V.