Previous 199869 Revisions Next

r21532 Saturday 2nd March, 2013 at 03:29:47 UTC by Carl
dinetwork: remove mcast_chk and check for multicast in recv (nw)
netdev_tap: do mac filtering (nw)
[src/emu]dinetwork.c dinetwork.h
[src/mess/machine]3c505.c 3c505.h dp8390.c dp8390.h mb8795.c mb8795.h
[src/osd/sdl]netdev_tap.c

trunk/src/osd/sdl/netdev_tap.c
r21531r21532
8181{
8282   int len;
8383   if(m_fd == -1) return 0;
84   len = read(m_fd, m_buf, sizeof(m_buf));
84   do {
85      len = read(m_fd, m_buf, sizeof(m_buf));
86   } while(!get_promisc() && memcmp(get_mac(), m_buf, 6));
8587   *buf = m_buf;
8688   return (len == -1)?0:len;
8789}
trunk/src/emu/dinetwork.c
r21531r21532
2626{
2727}
2828
29bool device_network_interface::mcast_chk(const UINT8 *buf, int len)
30{
31   // reject multicast packets
32   return false;
33}
34
3529void device_network_interface::set_promisc(bool promisc)
3630{
3731   m_promisc = promisc;
trunk/src/emu/dinetwork.h
r21531r21532
1919
2020   int send(UINT8 *buf, int len);
2121   virtual void recv_cb(UINT8 *buf, int len);
22   virtual bool mcast_chk(const UINT8 *buf, int len);
2322
2423protected:
2524   bool m_promisc;
trunk/src/mess/machine/3c505.c
r21531r21532
855855         return 1;
856856      }
857857   }
858   for (i = 0; i + ETHERNET_ADDR_SIZE < sizeof(m_multicast_list); i += ETHERNET_ADDR_SIZE)
859   {
860      if (memcmp(mac_address, m_multicast_list + i, ETHERNET_ADDR_SIZE) == 0)
861      {
862         return 1;
863      }
864   }
858865   return  0;
859866}
860867
r21531r21532
896903   }
897904}
898905
899bool threecom3c505_device::mcast_chk(const UINT8 *buf, int len) {
900   int i;
901   for (i = 0; i + ETHERNET_ADDR_SIZE < sizeof(m_multicast_list); i += ETHERNET_ADDR_SIZE)
902   {
903      if (memcmp(buf, m_multicast_list + i, ETHERNET_ADDR_SIZE) == 0)
904      {
905         LOG2(("threecom3c505_device::mcast_chk: true (len=%d)", len));
906         return true;
907      }
908   }
909   return  false;
910}
911
912906void threecom3c505_device::write_command_port( UINT8 data)
913907{
914908   LOG2(("writing 3C505 command port %02x - m_status=%02x m_control=%02x m_command_index=%02x", data, m_status, m_control, m_command_index));
trunk/src/mess/machine/3c505.h
r21531r21532
163163   static void static_set_interface(device_t &device, const threecom3c505_interface &interface);
164164
165165   void recv_cb(UINT8 *buf, int len);
166   bool mcast_chk(const UINT8 *buf, int len);
167166
168167   // device register I/O
169168   UINT8 read_port(offs_t offset);
trunk/src/mess/machine/dp8390.c
r21531r21532
132132   offset = start + 4;
133133   high16 = (m_regs.dcr & 4)?m_regs.rsar<<16:0;
134134   if(buf[0] & 1) {
135      if(!(m_regs.rcr & 4) && !memcmp((const char *)buf, "\xff\xff\xff\xff\xff\xff", 6)) return;
135      if(!memcmp((const char *)buf, "\xff\xff\xff\xff\xff\xff", 6)) {
136         if(!(m_regs.rcr & 4)) return;
137      } else return; // multicast
136138      m_regs.rsr = 0x20;
137139   } else m_regs.rsr = 0;
138140   len &= 0xffff;
r21531r21532
161163   if(!LOOPBACK) recv(buf, len);
162164}
163165
164bool dp8390_device::mcast_chk(const UINT8 *buf, int len) {
165   if(!(m_regs.rcr & 8)) return false;
166
167   return false; // TODO: multicast
168}
169
170166WRITE_LINE_MEMBER(dp8390_device::dp8390_cs) {
171167   m_cs = state;
172168}
trunk/src/mess/machine/dp8390.h
r21531r21532
3333   DECLARE_WRITE_LINE_MEMBER( dp8390_cs );
3434   DECLARE_WRITE_LINE_MEMBER( dp8390_reset );
3535   void recv_cb(UINT8 *buf, int len);
36   bool mcast_chk(const UINT8* buf, int len);
3736
3837protected:
3938   // device-level overrides
trunk/src/mess/machine/mb8795.c
r21531r21532
7979   receive();
8080}
8181
82bool mb8795_device::mcast_chk(const UINT8 *buf, int len)
83{
84   return true;
85}
86
8782READ8_MEMBER(mb8795_device::txstat_r)
8883{
8984   //  fprintf(stderr, "mb8795: txstat_r %02x (%08x)\n", txstat, space.device().safe_pc());
trunk/src/mess/machine/mb8795.h
r21531r21532
4343   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
4444
4545   virtual void recv_cb(UINT8 *buf, int len);
46   virtual bool mcast_chk(const UINT8* buf, int len);
4746
4847private:
4948   enum { TIMER_TX, TIMER_RX };

Previous 199869 Revisions Next


© 1997-2024 The MAME Team