Changeset 49542 in vbox for trunk/src/VBox/NetworkServices
- Timestamp:
- Nov 19, 2013 1:50:30 AM (11 years ago)
- svn:sync-xref-src-repo-rev:
- 90725
- Location:
- trunk/src/VBox/NetworkServices/DHCP
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/NetworkServices/DHCP/Config.cpp
r49328 r49542 692 692 * Network manager 693 693 */ 694 struct NetworkManager::Data 695 { 696 Data() 697 { 698 RT_ZERO(BootPReplyMsg); 699 cbBooPReplyMsg = 0; 700 701 m_pSession = NIL_RTR0PTR; 702 m_pIfBuf = NULL; 703 m_OurAddress.u = 0; 704 m_OurNetmask.u = 0; 705 RT_ZERO(m_OurMac); 706 } 707 708 union { 709 RTNETBOOTP BootPHeader; 710 uint8_t au8Storage[1024]; 711 } BootPReplyMsg; 712 int cbBooPReplyMsg; 713 714 /* XXX: artifacts should be hidden or removed from here. */ 715 PSUPDRVSESSION m_pSession; 716 INTNETIFHANDLE m_hIf; 717 PINTNETBUF m_pIfBuf; 718 719 RTNETADDRIPV4 m_OurAddress; 720 RTNETADDRIPV4 m_OurNetmask; 721 RTMAC m_OurMac; 722 }; 723 724 725 NetworkManager::NetworkManager():m(NULL) 726 { 727 m = new NetworkManager::Data(); 728 } 729 730 731 NetworkManager::~NetworkManager() 732 { 733 delete m; 734 m = NULL; 735 } 736 737 694 738 NetworkManager *NetworkManager::getNetworkManager() 695 739 { … … 711 755 712 756 RTNETADDRIPV4 address = l.getAddress(); 713 BootPReplyMsg.BootPHeader.bp_yiaddr = address;757 m->BootPReplyMsg.BootPHeader.bp_yiaddr = address; 714 758 715 759 /* Ubuntu ???*/ 716 BootPReplyMsg.BootPHeader.bp_ciaddr = address;760 m->BootPReplyMsg.BootPHeader.bp_ciaddr = address; 717 761 718 762 /* options: … … 758 802 Lease l = client.lease(); 759 803 address = l.getAddress(); 760 BootPReplyMsg.BootPHeader.bp_ciaddr = address;804 m->BootPReplyMsg.BootPHeader.bp_ciaddr = address; 761 805 762 806 … … 765 809 * XXX: Using addressHint is not correct way to initialize [cy]iaddress... 766 810 */ 767 BootPReplyMsg.BootPHeader.bp_ciaddr = address;768 BootPReplyMsg.BootPHeader.bp_yiaddr = address;769 770 Assert( BootPReplyMsg.BootPHeader.bp_yiaddr.u);811 m->BootPReplyMsg.BootPHeader.bp_ciaddr = address; 812 m->BootPReplyMsg.BootPHeader.bp_yiaddr = address; 813 814 Assert(m->BootPReplyMsg.BootPHeader.bp_yiaddr.u); 771 815 772 816 /* options: … … 814 858 * RFC 2131 require to have it zero fo NAK. 815 859 */ 816 BootPReplyMsg.BootPHeader.bp_yiaddr.u = 0;860 m->BootPReplyMsg.BootPHeader.bp_yiaddr.u = 0; 817 861 818 862 /* options: … … 832 876 833 877 878 const RTNETADDRIPV4& NetworkManager::getOurAddress() const 879 { 880 return m->m_OurAddress; 881 } 882 883 884 const RTNETADDRIPV4& NetworkManager::getOurNetmask() const 885 { 886 return m->m_OurNetmask; 887 } 888 889 890 const RTMAC& NetworkManager::getOurMac() const 891 { 892 return m->m_OurMac; 893 } 894 895 896 void NetworkManager::setOurAddress(const RTNETADDRIPV4& aAddress) 897 { 898 m->m_OurAddress = aAddress; 899 } 900 901 902 void NetworkManager::setOurNetmask(const RTNETADDRIPV4& aNetmask) 903 { 904 m->m_OurNetmask = aNetmask; 905 } 906 907 908 void NetworkManager::setOurMac(const RTMAC& aMac) 909 { 910 m->m_OurMac = aMac; 911 } 912 913 914 void NetworkManager::setSession(PSUPDRVSESSION aSession) 915 { 916 m->m_pSession = aSession; 917 } 918 919 920 void NetworkManager::setInterface(INTNETIFHANDLE aIf) 921 { 922 m->m_hIf = aIf; 923 } 924 925 926 void NetworkManager::setRingBuffer(PINTNETBUF aBuf) 927 { 928 m->m_pIfBuf = aBuf; 929 } 930 834 931 /** 835 932 * … … 837 934 int NetworkManager::prepareReplyPacket4Client(const Client& client, uint32_t u32Xid) 838 935 { 839 memset(&BootPReplyMsg, 0, sizeof(BootPReplyMsg));840 841 BootPReplyMsg.BootPHeader.bp_op = RTNETBOOTP_OP_REPLY;842 BootPReplyMsg.BootPHeader.bp_htype = RTNET_ARP_ETHER;843 BootPReplyMsg.BootPHeader.bp_hlen = sizeof(RTMAC);844 BootPReplyMsg.BootPHeader.bp_hops = 0;845 BootPReplyMsg.BootPHeader.bp_xid = u32Xid;846 BootPReplyMsg.BootPHeader.bp_secs = 0;936 RT_ZERO(m->BootPReplyMsg); 937 938 m->BootPReplyMsg.BootPHeader.bp_op = RTNETBOOTP_OP_REPLY; 939 m->BootPReplyMsg.BootPHeader.bp_htype = RTNET_ARP_ETHER; 940 m->BootPReplyMsg.BootPHeader.bp_hlen = sizeof(RTMAC); 941 m->BootPReplyMsg.BootPHeader.bp_hops = 0; 942 m->BootPReplyMsg.BootPHeader.bp_xid = u32Xid; 943 m->BootPReplyMsg.BootPHeader.bp_secs = 0; 847 944 /* XXX: bp_flags should be processed specially */ 848 BootPReplyMsg.BootPHeader.bp_flags = 0;849 BootPReplyMsg.BootPHeader.bp_ciaddr.u = 0;850 BootPReplyMsg.BootPHeader.bp_giaddr.u = 0;851 852 BootPReplyMsg.BootPHeader.bp_chaddr.Mac = client.getMacAddress();945 m->BootPReplyMsg.BootPHeader.bp_flags = 0; 946 m->BootPReplyMsg.BootPHeader.bp_ciaddr.u = 0; 947 m->BootPReplyMsg.BootPHeader.bp_giaddr.u = 0; 948 949 m->BootPReplyMsg.BootPHeader.bp_chaddr.Mac = client.getMacAddress(); 853 950 854 951 const Lease l = client.lease(); 855 BootPReplyMsg.BootPHeader.bp_yiaddr = l.getAddress();856 BootPReplyMsg.BootPHeader.bp_siaddr.u = 0;857 858 859 BootPReplyMsg.BootPHeader.bp_vend.Dhcp.dhcp_cookie = RT_H2N_U32_C(RTNET_DHCP_COOKIE);860 861 memset(& BootPReplyMsg.BootPHeader.bp_vend.Dhcp.dhcp_opts[0],952 m->BootPReplyMsg.BootPHeader.bp_yiaddr = l.getAddress(); 953 m->BootPReplyMsg.BootPHeader.bp_siaddr.u = 0; 954 955 956 m->BootPReplyMsg.BootPHeader.bp_vend.Dhcp.dhcp_cookie = RT_H2N_U32_C(RTNET_DHCP_COOKIE); 957 958 memset(&m->BootPReplyMsg.BootPHeader.bp_vend.Dhcp.dhcp_opts[0], 862 959 '\0', 863 960 RTNET_DHCP_OPT_SIZE); … … 874 971 Options.... 875 972 */ 876 VBoxNetDhcpWriteCursor Cursor(& BootPReplyMsg.BootPHeader, RTNET_DHCP_NORMAL_SIZE);973 VBoxNetDhcpWriteCursor Cursor(&m->BootPReplyMsg.BootPHeader, RTNET_DHCP_NORMAL_SIZE); 877 974 878 975 /* The basics */ 879 976 880 Cursor.optIPv4Addr(RTNET_DHCP_OPT_SERVER_ID, m _OurAddress);977 Cursor.optIPv4Addr(RTNET_DHCP_OPT_SERVER_ID, m->m_OurAddress); 881 978 882 979 const Lease l = client.lease(); … … 922 1019 else 923 1020 #endif 924 rc = VBoxNetUDPBroadcast(m _pSession,925 m _hIf,926 m _pIfBuf,927 m _OurAddress,928 &m _OurMac,1021 rc = VBoxNetUDPBroadcast(m->m_pSession, 1022 m->m_hIf, 1023 m->m_pIfBuf, 1024 m->m_OurAddress, 1025 &m->m_OurMac, 929 1026 RTNETIPV4_PORT_BOOTPS, /* sender */ 930 1027 RTNETIPV4_PORT_BOOTPC, 931 & BootPReplyMsg, RTNET_DHCP_NORMAL_SIZE);1028 &m->BootPReplyMsg, RTNET_DHCP_NORMAL_SIZE); 932 1029 933 1030 AssertRCReturn(rc,rc); -
trunk/src/VBox/NetworkServices/DHCP/Config.h
r49328 r49542 495 495 int nak(const Client& lease, uint32_t u32Xid); 496 496 497 const RTNETADDRIPV4& getOurAddress(){ return m_OurAddress;} 498 const RTNETADDRIPV4& getOurNetmask(){ return m_OurNetmask;} 499 const RTMAC& getOurMac() {return m_OurMac;} 500 501 void setOurAddress(const RTNETADDRIPV4& aAddress){ m_OurAddress = aAddress;} 502 void setOurNetmask(const RTNETADDRIPV4& aNetmask){ m_OurNetmask = aNetmask;} 503 void setOurMac(const RTMAC& aMac) {m_OurMac = aMac;} 504 505 /* XXX: artifacts should be hidden or removed from here. */ 506 PSUPDRVSESSION m_pSession; 507 INTNETIFHANDLE m_hIf; 508 PINTNETBUF m_pIfBuf; 497 const RTNETADDRIPV4& getOurAddress() const; 498 const RTNETADDRIPV4& getOurNetmask() const; 499 const RTMAC& getOurMac() const; 500 501 void setOurAddress(const RTNETADDRIPV4& aAddress); 502 void setOurNetmask(const RTNETADDRIPV4& aNetmask); 503 void setOurMac(const RTMAC& aMac); 504 505 void setSession(PSUPDRVSESSION); 506 void setInterface(INTNETIFHANDLE); 507 void setRingBuffer(PINTNETBUF); 509 508 510 509 private: 511 NetworkManager() {}512 virtual ~NetworkManager(){}510 NetworkManager(); 511 ~NetworkManager(); 513 512 514 513 int prepareReplyPacket4Client(const Client& client, uint32_t u32Xid); … … 516 515 int processParameterReqList(const Client& client, uint8_t *pu8ReqList, int cReqList); 517 516 518 union { 519 RTNETBOOTP BootPHeader; 520 uint8_t au8Storage[1024]; 521 } BootPReplyMsg; 522 int cbBooPReplyMsg; 523 524 RTNETADDRIPV4 m_OurAddress; 525 RTNETADDRIPV4 m_OurNetmask; 526 RTMAC m_OurMac; 517 private: 518 struct Data; 519 Data *m; 520 527 521 }; 528 522
Note:
See TracChangeset
for help on using the changeset viewer.