On Fri, May 24, 2013 at 9:24 AM, Dmitry Bazhenov <dim...@pigeonpoint.com> wrote: > Zdenek, > > Here it is. > > Regards, > Dmitry >
@@ -195,6 +196,23 @@ ORIG_CPPFLAGS=$CPPFLAGS +dnl enable serial interface +AC_ARG_ENABLE([intf-serial], + [AC_HELP_STRING([--enable-intf-serial], + [enable direct Serial Basic/Terminal mode interface [default=yes]])], + [xenable_intf_serial=$enableval], [xenable_intf_serial=yes]) +if test "x$enable_intf_serial" = "xstatic" || test "x$enable_intf_serial" = "xplugin"; then + enable_intf_serial=yes +fi +if test "x$xenable_intf_serial" = "xyes"; then + AC_DEFINE(IPMI_INTF_SERIAL, [1], [Define to 1 to enable serial interface.]) + AC_SUBST(INTF_SERIAL, [serial]) + AC_SUBST(INTF_SERIAL_LIB, [libintf_serial.la]) + IPMITOOL_INTF_LIB="$IPMITOOL_INTF_LIB serial/libintf_serial.la" +else + xenable_intf_serial=no +fi + dnl look for OpenIPMI header files AC_ARG_WITH([kerneldir], [AC_HELP_STRING([--with-kerneldir=DIR], @@ -583,7 +601,8 @@ Agreed? Z. > 24.05.2013 13:14, Dmitry Bazhenov пишет: >> >> Hello, Zdenek, >> >> >> I'll provide the updated patch in a minute with your comments addressed. >> I'll add the double check you're talking about and remove the assert >> since they are redundant. >> >> Regards, >> Dmitry >> >> 22.05.2013 14:55, Zdenek Styblik пишет: >>> >>> On Tue, May 21, 2013 at 4:18 PM, Dmitry Bazhenov >>> <dim...@pigeonpoint.com> wrote: >>> [...] >>>> >>>> I would like not to place excessive check there in order not to >>>> overload the >>>> code. The surrounding context pretty much ensures that the conversion >>>> goes >>>> smoothly without errors. >>>> >>> >>> Dmitry, >>> >>> I still disagree, because there is no reason why not to double check >>> it. I guess I'm paranoid like that. However, this was a suggestion not >>> condition. If you say it's sufficient, then it's sufficient. >>> >>>> >>>>> Is there some extra documentation necessary/required (and available) >>>>> so this can be used/implemented/supported by other parties? But I >>>>> pretty much guessed this is just shoveling IPMI packets over serial >>>>> line, am I correct? >>>> >>>> >>>> You are correct. It's just a way to interact with IPM Controllers. I >>>> don't >>>> think that anything more than the help string is required here. >>>> >>> >>> Alright. >>> >>>> >>>> Good. Can you acknowledge that the patch will be submitted into the >>>> mainline? >>>> >>> >>> I don't know what exactly you meant by this question. If I'm the one >>> doing the commit, then yes. I have no problem to commit this into >>> ipmitool. >>> >>> Ok, I have one more question. serial_read_line() and >>> serial_write_line() have assert(str). Is this on purpose? Why? Are you >>> aware it's going to crash the program? I'm not in favour of doing such >>> thing. Since both functions return int, couldn't it be possible to do >>> without assert()? >>> >>> Thanks, >>> Z. >>> >>>> >>>> No more comments below. >>>> >>>> Regards, >>>> Dmitry >>>> >>>>> >>>>> Thanks, >>>>> Z. >>>>> >>>>>> >>>>>> Regards, >>>>>> Dmitry >>>>>> >>>>>> 20.05.2013 19:32, Zdenek Styblik пишет: >>>>>> >>>>>>> On Mon, May 20, 2013 at 3:07 PM, Dmitry Bazhenov >>>>>>> <dim...@pigeonpoint.com> >>>>>>> wrote: >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> Zdenek, >>>>>>>> >>>>>>>> I agree with the first fragment changes (probably, it is worth >>>>>>>> making >>>>>>>> "rv" >>>>>>>> an unsigned long). >>>>>>>> >>>>>>> >>>>>>> Dmitry, >>>>>>> >>>>>>> it was just a quick modification to show what I meant. >>>>>>> >>>>>>>> As for the second fragment, I suggest we remove any check at all. >>>>>>>> The >>>>>>>> surrounding context ensures that the converted string is a 2-digit >>>>>>>> hexadecimal (see the isxdigit(ch) check upper to the fragment). >>>>>>>> >>>>>>> >>>>>>> Uh. I'd be rather safe than sorry. My $0.02 USD. >>>>>>> >>>>>>> Best regards, >>>>>>> Z. >>>>>>> >>>>>>>> Regards, >>>>>>>> Dmitry >>>>>>>> >>>>>>>> 20.05.2013 18:50, Zdenek Styblik пишет: >>>>>>>> >>>>>>>>> On Mon, May 20, 2013 at 2:17 PM, Dmitry Bazhenov >>>>>>>>> <dim...@pigeonpoint.com> >>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Hello, Zdenek, >>>>>>>>>> >>>>>>>>>> I've addressed your comments. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>>> I see. Well, this sucks. Two solutions come to my mind. The >>>>>>>>>>> first is >>>>>>>>>>> to extend str2*() calls which, I admit, is going to be a bit of >>>>>>>>>>> work. >>>>>>>>>>> The second is to check 'errno', endptr and '#include >>>>>>>>>>> <limits.h>'. In >>>>>>>>>>> other words, do what str2*() calls do. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> I added checks of endptr and errno after the strtol() calls. In >>>>>>>>>> the >>>>>>>>>> context >>>>>>>>>> of these two calls these checks look sufficient to me. Please, >>>>>>>>>> review. >>>>>>>>>> >>>>>>>>>> Regards, >>>>>>>>>> Dmitry >>>>>>>>>> >>>>>>>>> >>>>>>>>> Dmitry, >>>>>>>>> >>>>>>>>> please, see changes I've made/I propose. Lines which don't >>>>>>>>> being/aren't prefixed with '+' got either changed or added. >>>>>>>>> Also, some >>>>>>>>> parts of the code are missing, but since you have written it, it >>>>>>>>> shouldn't be a problem. >>>>>>>>> If you have any questions regarding changes I've made, please, ask. >>>>>>>>> >>>>>>>>> +static int >>>>>>>>> +recv_response(struct ipmi_intf * intf, unsigned char *data, int >>>>>>>>> len) >>>>>>>>> +{ >>>>>>>>> + char hex_rs[IPMI_SERIAL_MAX_RESPONSE * 3]; >>>>>>>>> int i, j, resp_len = 0; >>>>>>>>> /* This shouldn't matter since rv isn't used further >>>>>>>>> in the >>>>>>>>> code, is it? */ >>>>>>>>> long int rv = 0; >>>>>>>>> unsigned long int hex_tmp = 0; >>>>>>>>> [...] >>>>>>>>> + if (strncmp(p, "ERR ", 4) == 0) { >>>>>>>>> + serial_write_line(intf, "\r\r\r\r"); >>>>>>>>> + sleep(1); >>>>>>>>> + serial_flush(intf); >>>>>>>>> errno = 0; >>>>>>>>> rv = strtol(p + 4, &p, 16); >>>>>>>>> + if ((rv && rv < 0x100 && *p == '\0') >>>>>>>>> + || (rv == 0 && !errno)) { >>>>>>>>> + /* The message didn't get it through. The upper >>>>>>>>> + level will have to re-send */ >>>>>>>>> + return 0; >>>>>>>>> + } else { >>>>>>>>> + lprintf(LOG_ERR, "Serial response is invalid"); >>>>>>>>> + return -1; >>>>>>>>> + } >>>>>>>>> + } >>>>>>>>> + /* parse the response */ >>>>>>>>> + i = 0; >>>>>>>>> + j = 0; >>>>>>>>> + while (*p) { >>>>>>>>> [...] >>>>>>>>> + if (j == 2) { >>>>>>>>> + /* parse the hex number */ >>>>>>>>> + str_hex[j] = 0; >>>>>>>>> errno = 0; >>>>>>>>> hex_tmp = strtoul(str_hex, &pp, 16); >>>>>>>>> /* I'm not 100% sure about "|| *pp != '\0' " >>>>>>>>> here. >>>>>>>>> Please, test it! */ >>>>>>>>> if (errno != 0 || hex_tmp > UCHAR_MAX || *pp >>>>>>>>> != '\0') >>>>>>>>> { >>>>>>>>> /* TODO - Handle this error */ >>>>>>>>> } >>>>>>>>> data[i++] = hex_tmp; >>>>>>>>> + if (pp == str_hex || *pp != 0) { >>>>>>>>> + break; >>>>>>>>> + } >>>>>>>>> + j = 0; >>>>>>>>> + } >>>>>>>>> [...] >>>>>>>>> >>>>>>>>> Best regards, >>>>>>>>> Z. >>>>>>>>> >>>>>>>>>> 20.05.2013 10:46, Zdenek Styblik пишет: >>>>>>>>>> >>>>>>>>>>> On Mon, May 20, 2013 at 6:31 AM, Dmitry Bazhenov >>>>>>>>>>> <dim...@pigeonpoint.com> >>>>>>>>>>> wrote: >>>>>>>>>>> [...] >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> Great. However, please fix the following lines: >>>>>>>>>>>>> + rate = atol(p + 1); >>>>>>>>>>>>> + rate = atol(p + 1); >>>>>>>>>>>>> + rv = strtol(p + 4, &p, 16); >>>>>>>>>>>>> + data[i++] = (unsigned char) >>>>>>>>>>>>> strtol(str_hex, >>>>>>>>>>>>> &pp, >>>>>>>>>>>>> 16); >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> I have changed atol() calls to str2uint(). >>>>>>>>>>>> Unfortunately, ipmitool/helper.h does not provide appropriate >>>>>>>>>>>> API >>>>>>>>>>>> to >>>>>>>>>>>> replace >>>>>>>>>>>> strtol(). In the code strtol() is called with radix=16 that >>>>>>>>>>>> means >>>>>>>>>>>> the >>>>>>>>>>>> input >>>>>>>>>>>> is read in hexadecimal form only. I think it is best to leave >>>>>>>>>>>> the >>>>>>>>>>>> strtol() >>>>>>>>>>>> calls there as they are. >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> I see. Well, this sucks. Two solutions come to my mind. The >>>>>>>>>>> first is >>>>>>>>>>> to extend str2*() calls which, I admit, is going to be a bit of >>>>>>>>>>> work. >>>>>>>>>>> The second is to check 'errno', endptr and '#include >>>>>>>>>>> <limits.h>'. In >>>>>>>>>>> other words, do what str2*() calls do. >>>>>>>>>>> >>>>>>>>>>> [...] >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> I'm also wondering whether /dev/tty or /dev/ttyS couldn't be >>>>>>>>>>>>> implied >>>>>>>>>>>>> and whether extending 'struct ipmi_intf' is really >>>>>>>>>>>>> necessary. But >>>>>>>>>>>>> it's >>>>>>>>>>>>> just a silly question, I guess. >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> I couldn't find a better solution to provide a device string >>>>>>>>>>>> to the >>>>>>>>>>>> drivers. >>>>>>>>>>>> The implying /dev/tty(s, USB) strings in the command-line is >>>>>>>>>>>> possible. >>>>>>>>>>>> I'll >>>>>>>>>>>> think through how to make it without affecting those users >>>>>>>>>>>> who get >>>>>>>>>>>> used >>>>>>>>>>>> to >>>>>>>>>>>> specify the full device names. >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> No, you're right. Serial dev can have <whatever> name. I guess >>>>>>>>>>> it's >>>>>>>>>>> fine as it's. >>>>>>>>>>> >>>>>>>>>>> [...] >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> These two functions both return a pointer to the static data. >>>>>>>>>>>> Hence, >>>>>>>>>>>> the >>>>>>>>>>>> #ifdef guard is unnecessary. >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Hmm :-S Ok. To be honest, I'm disappointed, because this means >>>>>>>>>>> possible memory leak which "can't" be fixed. >>>>>>>>>>> >>>>>>>>>>> Thanks, >>>>>>>>>>> Z. >>>>>>>>>>> >>>>>>>>>>>> I'll provide the updated patch for serial drivers and separate >>>>>>>>>>>> patch >>>>>>>>>>>> for >>>>>>>>>>>> the >>>>>>>>>>>> bug soon. >>>>>>>>>>>> >>>>>>>>>>>> No more comments below. >>>>>>>>>>>> >>>>>>>>>>>> Regards, >>>>>>>>>>>> Dmitry >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> Thanks, >>>>>>>>>>>>> Z. >>>>>>>>>>>>> >>>>>>>>>>>>>> Please, review. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Regards, >>>>>>>>>>>>>> Dmitry >>>>>>>>>>>>>> >>>>>>>>>>>>>> 26.04.2013 16:08, Dmitry Bazhenov пишет: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> Hello, all, >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> I would like to submit a patch which adds Serial Basic and >>>>>>>>>>>>>>> Terminal >>>>>>>>>>>>>>> mode >>>>>>>>>>>>>>> interface drivers which utilize a direct serial connection in >>>>>>>>>>>>>>> order >>>>>>>>>>>>>>> to >>>>>>>>>>>>>>> interact with IPMC. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Both the patches implement single and double bridging. >>>>>>>>>>>>>>> However, >>>>>>>>>>>>>>> bridging >>>>>>>>>>>>>>> is temporarily broken for PICMG systems due to the known >>>>>>>>>>>>>>> bridging >>>>>>>>>>>>>>> issues. I'm going to update the patch as soon as these issues >>>>>>>>>>>>>>> are >>>>>>>>>>>>>>> resolved. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Regards, >>>>>>>>>>>>>>> Dmitry >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> ------------------------------------------------------------------------------ >>>>>>>>>>>>>> >>>>>>>>>>>>>> AlienVault Unified Security Management (USM) platform delivers >>>>>>>>>>>>>> complete >>>>>>>>>>>>>> security visibility with the essential security capabilities. >>>>>>>>>>>>>> Easily >>>>>>>>>>>>>> and >>>>>>>>>>>>>> efficiently configure, manage, and operate all of your >>>>>>>>>>>>>> security >>>>>>>>>>>>>> controls >>>>>>>>>>>>>> from a single console and one unified framework. Download a >>>>>>>>>>>>>> free >>>>>>>>>>>>>> trial. >>>>>>>>>>>>>> http://p.sf.net/sfu/alienvault_d2d >>>>>>>>>>>>>> _______________________________________________ >>>>>>>>>>>>>> Ipmitool-devel mailing list >>>>>>>>>>>>>> Ipmitool-devel@lists.sourceforge.net >>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/ipmitool-devel >>>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>> >>>>>>>> >>>>>> >>>> > ------------------------------------------------------------------------------ Try New Relic Now & We'll Send You this Cool Shirt New Relic is the only SaaS-based application performance monitoring service that delivers powerful full stack analytics. Optimize and monitor your browser, app, & servers with just a few lines of code. Try New Relic and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_may _______________________________________________ Ipmitool-devel mailing list Ipmitool-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ipmitool-devel