- Timestamp:
- May 10, 2017 11:51:10 AM (7 years ago)
- Location:
- trunk/src/VBox/Frontends/VirtualBox/src/hostnetwork
- Files:
-
- 3 edited
-
UIHostNetworkDetailsDialog.cpp (modified) (2 diffs)
-
UIHostNetworkUtils.cpp (modified) (2 diffs)
-
UIHostNetworkUtils.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkDetailsDialog.cpp
r66855 r66860 65 65 /* Save old data: */ 66 66 m_oldData = data; 67 68 /* Invent default old values if current old values are invalid: */69 const quint32 uAddr = ipv4FromQStringToQuint32(m_oldData.m_interface.m_strAddress);70 const quint32 uMask = ipv4FromQStringToQuint32(m_oldData.m_interface.m_strMask);71 const quint32 uProp = uAddr & uMask;72 const QString strMask = ipv4FromQuint32ToQString(uMask);73 const QString strProp = ipv4FromQuint32ToQString(uProp);74 // printf("Proposal is = %s x %s\n",75 // strProp.toUtf8().constData(),76 // strMask.toUtf8().constData());77 if ( m_oldData.m_dhcpserver.m_strAddress.isEmpty()78 || m_oldData.m_dhcpserver.m_strAddress == "0.0.0.0")79 m_oldData.m_dhcpserver.m_strAddress = strProp;80 if ( m_oldData.m_dhcpserver.m_strMask.isEmpty()81 || m_oldData.m_dhcpserver.m_strMask == "0.0.0.0")82 m_oldData.m_dhcpserver.m_strMask = strMask;83 if ( m_oldData.m_dhcpserver.m_strLowerAddress.isEmpty()84 || m_oldData.m_dhcpserver.m_strLowerAddress == "0.0.0.0")85 m_oldData.m_dhcpserver.m_strLowerAddress = strProp;86 if ( m_oldData.m_dhcpserver.m_strUpperAddress.isEmpty()87 || m_oldData.m_dhcpserver.m_strUpperAddress == "0.0.0.0")88 m_oldData.m_dhcpserver.m_strUpperAddress = strProp;89 90 67 /* Copy old data to new one: */ 91 68 m_newData = m_oldData; … … 759 736 m_pEditorDHCPLowerAddress->setText(m_newData.m_dhcpserver.m_strLowerAddress); 760 737 m_pEditorDHCPUpperAddress->setText(m_newData.m_dhcpserver.m_strUpperAddress); 738 739 /* Invent default values if server was enabled 740 * but at least one current value is invalid: */ 741 if ( fIsDHCPServerEnabled 742 && ( m_pEditorDHCPAddress->text().isEmpty() 743 || m_pEditorDHCPAddress->text() == "0.0.0.0" 744 || m_pEditorDHCPMask->text().isEmpty() 745 || m_pEditorDHCPMask->text() == "0.0.0.0" 746 || m_pEditorDHCPLowerAddress->text().isEmpty() 747 || m_pEditorDHCPLowerAddress->text() == "0.0.0.0" 748 || m_pEditorDHCPUpperAddress->text().isEmpty() 749 || m_pEditorDHCPUpperAddress->text() == "0.0.0.0")) 750 { 751 const QStringList &proposal = makeDhcpServerProposal(m_oldData.m_interface.m_strAddress, 752 m_oldData.m_interface.m_strMask); 753 m_pEditorDHCPAddress->setText(proposal.at(0)); 754 m_pEditorDHCPMask->setText(proposal.at(1)); 755 m_pEditorDHCPLowerAddress->setText(proposal.at(2)); 756 m_pEditorDHCPUpperAddress->setText(proposal.at(3)); 757 } 761 758 } 762 759 -
trunk/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkUtils.cpp
r66855 r66860 19 19 # include <precomp.h> 20 20 #else /* !VBOX_WITH_PRECOMPILED_HEADERS */ 21 22 /* Qt includes: */23 # include <QStringList>24 21 25 22 /* GUI includes: */ … … 55 52 } 56 53 54 quint32 UIHostNetworkUtils::incrementNetworkAddress(quint32 uAddress) 55 { 56 return advanceNetworkAddress(uAddress, true /* forward */); 57 } 58 59 quint32 UIHostNetworkUtils::decrementNetworkAddress(quint32 uAddress) 60 { 61 return advanceNetworkAddress(uAddress, false /* forward */); 62 } 63 64 quint32 UIHostNetworkUtils::advanceNetworkAddress(quint32 uAddress, bool fForward) 65 { 66 /* Success by default: */ 67 bool fSuccess = true; 68 do 69 { 70 /* Just advance address: */ 71 if (fForward) 72 ++uAddress; 73 else 74 --uAddress; 75 /* And treat it as success initially: */ 76 fSuccess = true; 77 /* Iterate the resulting bytes: */ 78 uint uByteIndex = 0; 79 quint32 uIterator = uAddress; 80 while (fSuccess && uIterator) 81 { 82 /* Get current byte: */ 83 const quint32 uCurrentByte = uIterator & 0xFF; 84 /* Advance iterator early: */ 85 uIterator = uIterator >> 8; 86 // We know that .0. and .255. are legal these days 87 // but still prefer to exclude them from 88 // being proposed to an end user. 89 /* If current byte equal to 255 90 * or first byte equal to 0, 91 * let's try again: */ 92 if ( uCurrentByte == 0xFF 93 || (uCurrentByte == 0x00 && uByteIndex == 0)) 94 fSuccess = false; 95 /* Advance byte index: */ 96 ++uByteIndex; 97 } 98 } 99 while (!fSuccess); 100 return uAddress; 101 } 102 103 QStringList UIHostNetworkUtils::makeDhcpServerProposal(const QString &strInterfaceAddress, const QString &strInterfaceMask) 104 { 105 /* Convert interface address/mask into digital form and calculate inverted interface mask: */ 106 const quint32 uAddress = ipv4FromQStringToQuint32(strInterfaceAddress); 107 const quint32 uMaskDirect = ipv4FromQStringToQuint32(strInterfaceMask); 108 const quint32 uMaskInvert = ~uMaskDirect; 109 //printf("Direct mask: %s (%u)\n", ipv4FromQuint32ToQString(uMaskDirect).toUtf8().constData(), uMaskDirect); 110 //printf("Inverted mask: %s (%u)\n", ipv4FromQuint32ToQString(uMaskInvert).toUtf8().constData(), uMaskInvert); 111 112 /* Split the interface address into left and right parts: */ 113 const quint32 uPartL = uAddress & uMaskDirect; 114 const quint32 uPartR = uAddress & uMaskInvert; 115 //printf("Left part: %s (%u)\n", ipv4FromQuint32ToQString(uPartL).toUtf8().constData(), uPartL); 116 //printf("Right part: %s (%u)\n", ipv4FromQuint32ToQString(uPartR).toUtf8().constData(), uPartR); 117 118 /* Prepare DHCP server proposal:" */ 119 quint32 uServerProposedAddress = 0; 120 quint32 uServerProposedAddressL = 0; 121 quint32 uServerProposedAddressU = 0; 122 if (uPartR < uMaskInvert / 2) 123 { 124 /* Make DHCP server proposal from right scope: */ 125 //printf("Make DHCP server proposal from right scope:\n"); 126 uServerProposedAddress = uPartL + incrementNetworkAddress(uPartR); 127 uServerProposedAddressL = uPartL + incrementNetworkAddress(incrementNetworkAddress(uPartR)); 128 uServerProposedAddressU = uPartL + (uMaskInvert & 0xFEFEFEFE) /* decrementNetworkAddress(uMaskInvert) */; 129 } 130 else 131 { 132 /* Make DHCP server proposal from left scope: */ 133 //printf("Make DHCP server proposal from left scope:\n"); 134 uServerProposedAddress = uPartL + 1 /* incrementNetworkAddress(0) */; 135 uServerProposedAddressL = uPartL + 2 /* incrementNetworkAddress(incrementNetworkAddress(0)) */; 136 uServerProposedAddressU = uPartL + decrementNetworkAddress(uPartR); 137 } 138 //printf("DHCP server address: %s (%u)\n", ipv4FromQuint32ToQString(uServerProposedAddress).toUtf8().constData(), uServerProposedAddress); 139 //printf("DHCP server lower address: %s (%u)\n", ipv4FromQuint32ToQString(uServerProposedAddressL).toUtf8().constData(), uServerProposedAddressL); 140 //printf("DHCP server upper address: %s (%u)\n", ipv4FromQuint32ToQString(uServerProposedAddressU).toUtf8().constData(), uServerProposedAddressU); 141 142 /* Pack and return result: */ 143 return QStringList() << ipv4FromQuint32ToQString(uServerProposedAddress) 144 << ipv4FromQuint32ToQString(uMaskDirect) 145 << ipv4FromQuint32ToQString(uServerProposedAddressL) 146 << ipv4FromQuint32ToQString(uServerProposedAddressU); 147 } 148 -
trunk/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkUtils.h
r66855 r66860 20 20 21 21 /* Qt includes: */ 22 #include <QString >22 #include <QStringList> 23 23 24 24 … … 30 30 /** Converts IPv4 address from quint32 to QString. */ 31 31 QString ipv4FromQuint32ToQString(quint32 uAddress); 32 33 /** Increments network @a uAddress by 1 avoiding 0/255 values. */ 34 quint32 incrementNetworkAddress(quint32 uAddress); 35 /** Decrements network @a uAddress by 1 avoiding 0/255 values. */ 36 quint32 decrementNetworkAddress(quint32 uAddress); 37 /** Advances network @a uAddress by 1 avoiding 0/255 values. 38 * @param fForward Brings whether advance should 39 * go forward or backward otherwise. */ 40 quint32 advanceNetworkAddress(quint32 uAddress, bool fForward); 41 42 /** Calculates DHCP server proposal on the basis of the passed @a strInterfaceAddress and @a strInterfaceMask. */ 43 QStringList makeDhcpServerProposal(const QString &strInterfaceAddress, const QString &strInterfaceMask); 32 44 } 33 45
Note:
See TracChangeset
for help on using the changeset viewer.

