mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-05 20:35:44 +00:00
Merge remote-tracking branch 'stefanha/net' into staging
* stefanha/net: rtl8139: preserve link state across device reset e1000: no need auto-negotiation if link was down net: clean up network at qemu process termination e1000: Discard oversized packets based on SBP|LPE Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
commit
c3dd94b129
3 changed files with 15 additions and 4 deletions
12
hw/e1000.c
12
hw/e1000.c
|
@ -61,6 +61,8 @@ static int debugflags = DBGBIT(TXERR) | DBGBIT(GENERAL);
|
|||
|
||||
/* this is the size past which hardware will drop packets when setting LPE=0 */
|
||||
#define MAXIMUM_ETHERNET_VLAN_SIZE 1522
|
||||
/* this is the size past which hardware will drop packets when setting LPE=1 */
|
||||
#define MAXIMUM_ETHERNET_LPE_SIZE 16384
|
||||
|
||||
/*
|
||||
* HW models:
|
||||
|
@ -164,6 +166,11 @@ static void
|
|||
set_phy_ctrl(E1000State *s, int index, uint16_t val)
|
||||
{
|
||||
if ((val & MII_CR_AUTO_NEG_EN) && (val & MII_CR_RESTART_AUTO_NEG)) {
|
||||
/* no need auto-negotiation if link was down */
|
||||
if (s->nic->nc.link_down) {
|
||||
s->phy_reg[PHY_STATUS] |= MII_SR_AUTONEG_COMPLETE;
|
||||
return;
|
||||
}
|
||||
s->nic->nc.link_down = true;
|
||||
e1000_link_down(s);
|
||||
s->phy_reg[PHY_STATUS] &= ~MII_SR_AUTONEG_COMPLETE;
|
||||
|
@ -809,8 +816,9 @@ e1000_receive(NetClientState *nc, const uint8_t *buf, size_t size)
|
|||
}
|
||||
|
||||
/* Discard oversized packets if !LPE and !SBP. */
|
||||
if (size > MAXIMUM_ETHERNET_VLAN_SIZE
|
||||
&& !(s->mac_reg[RCTL] & E1000_RCTL_LPE)
|
||||
if ((size > MAXIMUM_ETHERNET_LPE_SIZE ||
|
||||
(size > MAXIMUM_ETHERNET_VLAN_SIZE
|
||||
&& !(s->mac_reg[RCTL] & E1000_RCTL_LPE)))
|
||||
&& !(s->mac_reg[RCTL] & E1000_RCTL_SBP)) {
|
||||
return size;
|
||||
}
|
||||
|
|
|
@ -1258,7 +1258,8 @@ static void rtl8139_reset(DeviceState *d)
|
|||
s->BasicModeStatus = 0x7809;
|
||||
//s->BasicModeStatus |= 0x0040; /* UTP medium */
|
||||
s->BasicModeStatus |= 0x0020; /* autonegotiation completed */
|
||||
s->BasicModeStatus |= 0x0004; /* link is up */
|
||||
/* preserve link state */
|
||||
s->BasicModeStatus |= s->nic->nc.link_down ? 0 : 0x04;
|
||||
|
||||
s->NWayAdvert = 0x05e1; /* all modes, full duplex */
|
||||
s->NWayLPAR = 0x05e1; /* all modes, full duplex */
|
||||
|
|
4
vl.c
4
vl.c
|
@ -3762,6 +3762,9 @@ int main(int argc, char **argv, char **envp)
|
|||
}
|
||||
configure_icount(icount_option);
|
||||
|
||||
/* clean up network at qemu process termination */
|
||||
atexit(&net_cleanup);
|
||||
|
||||
if (net_init_clients() < 0) {
|
||||
exit(1);
|
||||
}
|
||||
|
@ -4014,7 +4017,6 @@ int main(int argc, char **argv, char **envp)
|
|||
main_loop();
|
||||
bdrv_close_all();
|
||||
pause_all_vcpus();
|
||||
net_cleanup();
|
||||
res_free();
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Reference in a new issue