OpenVMPS on Solaris

Help
2006-11-28
2013-04-15
  • Michael Jahn
    Michael Jahn
    2006-11-28

    Hi,

    I have compiled OpenVMPS on Solaris 10/Sparc without errors and it seems to work if I use the Perl script to test. However, as soon as our Cisco switch (2960) tries to access it it dumps core. I have traces the system calls and below is there error. I am not a programmer but it looks like a floating point variable is out of bounds:

    15111:  recvfrom(3, 0xFFBFF400, 2048, 0, 0xFFBFF3F0, 0xFFBFF3EC) (sleeping...)
    15111:  recvfrom(3, "0101\005\0\00281\0\0\f01".., 2048, 0, 0xFFBFF3F0, 0xFFBFF3EC) = 63
    15111:  sendto(3, "010205\0\0\00281", 8, 0, 0xFFBFFCF4, 16) = 8
    15111:      Incurred fault #6, FLTBOUNDS  %pc = 0xFF130C90
    15111:        siginfo: SIGSEGV SEGV_MAPERR addr=0x00000000
    15111:      Received signal #11, SIGSEGV [default]
    15111:        siginfo: SIGSEGV SEGV_MAPERR addr=0x00000000

    I was just wondering if this is a known problem and if you are likely to fix it. Please let me know if you need any other information.

    Many thanks,

    Michael

     
    • Karl Hakimian
      Karl Hakimian
      2007-03-20

      I have a patch that fixes a segfault that I found. It also fixes a 64bit problem when sending packets.

      *** vmpsd/vqp.c.orig    Tue Aug  3 05:54:04 2004
      --- vmpsd/vqp.c Tue Mar 20 06:48:33 2007
      ***************
      *** 127,134 ****
              VQP_HEADER      h;
              u_char          buf[MAX_PACKET_SIZE];
              u_char          *p;
      !       unsigned long int       data_type;
      !       unsigned short int      data_len;
              unsigned int            n = 0;
       
              h.unkn1         = 0x01;
      --- 127,134 ----
              VQP_HEADER      h;
              u_char          buf[MAX_PACKET_SIZE];
              u_char          *p;
      !       uint32_t         data_type;
      !       uint16_t        data_len;
              unsigned int            n = 0;
       
              h.unkn1         = 0x01;
      ***************
      *** 310,316 ****
                                      MAC_ENTRY *m;
       
                                      m = find_mac(r->mac);
      !                               if ( (m->speed != 0) || (m->duplex != 0) )
                                              set_port_speed( inet_ntoa(r->client_ip),
                                                              community,
                                                              r->port,
      --- 310,316 ----
                                      MAC_ENTRY *m;
       
                                      m = find_mac(r->mac);
      !                               if ( m != NULL && ((m->speed != 0) || (m->duplex != 0)) )
                                              set_port_speed( inet_ntoa(r->client_ip),
                                                              community,
                                                              r->port,