This is an automated email from the ASF dual-hosted git repository.

maskit pushed a commit to branch quic-latest
in repository https://gitbox.apache.org/repos/asf/trafficserver.git


The following commit(s) were added to refs/heads/quic-latest by this push:
     new c6b0534  Allocate buffer for UDP packets with a size of PMTU
c6b0534 is described below

commit c6b05347e0616fe666dc6412a76f05291bce68a1
Author: Masakazu Kitajo <mas...@apache.org>
AuthorDate: Tue Aug 15 10:50:15 2017 +0900

    Allocate buffer for UDP packets with a size of PMTU
---
 iocore/net/P_QUICNetProcessor.h     |  3 ++-
 iocore/net/P_QUICNetVConnection.h   |  5 +++--
 iocore/net/QUICNetVConnection.cc    |  6 ++++++
 iocore/net/QUICPacketHandler.cc     |  9 ++++++---
 iocore/net/quic/Mock.h              | 27 ++++++++++++++++++++++++---
 iocore/net/quic/QUICConnection.h    |  7 +++++--
 iocore/net/quic/QUICHandshake.h     |  1 -
 iocore/net/quic/QUICStreamManager.h |  2 +-
 8 files changed, 47 insertions(+), 13 deletions(-)

diff --git a/iocore/net/P_QUICNetProcessor.h b/iocore/net/P_QUICNetProcessor.h
index d6a57fa..f5a2906 100644
--- a/iocore/net/P_QUICNetProcessor.h
+++ b/iocore/net/P_QUICNetProcessor.h
@@ -50,7 +50,8 @@ struct NetAccept;
 //  class QUICNetProcessor
 //
 //////////////////////////////////////////////////////////////////
-class QUICNetProcessor : public UnixNetProcessor {
+class QUICNetProcessor : public UnixNetProcessor
+{
 public:
   QUICNetProcessor();
   virtual ~QUICNetProcessor();
diff --git a/iocore/net/P_QUICNetVConnection.h 
b/iocore/net/P_QUICNetVConnection.h
index 3eea803..1a143b9 100644
--- a/iocore/net/P_QUICNetVConnection.h
+++ b/iocore/net/P_QUICNetVConnection.h
@@ -153,8 +153,6 @@ public:
   int state_connection_closing(int event, Event *data);
   int state_connection_closed(int event, Event *data);
   void start(SSL_CTX *);
-  uint32_t maximum_quic_packet_size();
-  uint32_t minimum_quic_packet_size();
   void push_packet(std::unique_ptr<const QUICPacket> packet);
   void free(EThread *t) override;
 
@@ -165,6 +163,9 @@ public:
   // QUICConnection
   QUICApplication *get_application(QUICStreamId stream_id) override;
   QUICCrypto *get_crypto() override;
+  uint32_t maximum_quic_packet_size() override;
+  uint32_t minimum_quic_packet_size() override;
+  uint32_t pmtu() override;
   void close(QUICError error) override;
 
   // QUICConnection (QUICPacketTransmitter)
diff --git a/iocore/net/QUICNetVConnection.cc b/iocore/net/QUICNetVConnection.cc
index ca963fa..421555a 100644
--- a/iocore/net/QUICNetVConnection.cc
+++ b/iocore/net/QUICNetVConnection.cc
@@ -134,6 +134,12 @@ QUICNetVConnection::reenable(VIO *vio)
 }
 
 uint32_t
+QUICNetVConnection::pmtu()
+{
+  return this->_pmtu;
+}
+
+uint32_t
 QUICNetVConnection::minimum_quic_packet_size()
 {
   if (this->options.ip_family == PF_INET6) {
diff --git a/iocore/net/QUICPacketHandler.cc b/iocore/net/QUICPacketHandler.cc
index 47e0505..9286ada 100644
--- a/iocore/net/QUICPacketHandler.cc
+++ b/iocore/net/QUICPacketHandler.cc
@@ -135,10 +135,13 @@ QUICPacketHandler::send_packet(const QUICPacket &packet, 
QUICNetVConnection *vc)
     this->_connections.put(packet.connection_id(), vc);
   }
 
-  uint8_t udp_payload[65536];
   size_t udp_len;
-  packet.store(udp_payload, &udp_len);
-  UDPPacket *udpPkt = new_UDPPacket(vc->con.addr, 0, reinterpret_cast<char 
*>(udp_payload), udp_len);
+  Ptr<IOBufferBlock> udp_payload(new_IOBufferBlock());
+  udp_payload->alloc(iobuffer_size_to_index(vc->pmtu()));
+  packet.store(reinterpret_cast<uint8_t *>(udp_payload->end()), &udp_len);
+  udp_payload->fill(udp_len);
+
+  UDPPacket *udpPkt = new_UDPPacket(vc->con.addr, 0, udp_payload);
 
   // NOTE: p will be enqueued to udpOutQueue of UDPNetHandler
   ip_port_text_buffer ipb;
diff --git a/iocore/net/quic/Mock.h b/iocore/net/quic/Mock.h
index 6f0b14f..462df2b 100644
--- a/iocore/net/quic/Mock.h
+++ b/iocore/net/quic/Mock.h
@@ -40,17 +40,38 @@ public:
     ++_totalFrameCount;
   }
 
-  QUICApplication *get_application(QUICStreamId stream_id) override
+  QUICApplication *
+  get_application(QUICStreamId stream_id) override
   {
     return nullptr;
   }
 
-  QUICCrypto *get_crypto() override
+  QUICCrypto *
+  get_crypto() override
   {
     return nullptr;
   }
 
-  void close(QUICError error) override
+  uint32_t
+  minimum_quic_packet_size() override
+  {
+    return 1200;
+  }
+
+  uint32_t
+  maximum_quic_packet_size() override
+  {
+    return 1200;
+  }
+
+  uint32_t
+  pmtu() override
+  {
+    return 1280;
+  }
+
+  void
+  close(QUICError error) override
   {
   }
 
diff --git a/iocore/net/quic/QUICConnection.h b/iocore/net/quic/QUICConnection.h
index 236842b..22f373e 100644
--- a/iocore/net/quic/QUICConnection.h
+++ b/iocore/net/quic/QUICConnection.h
@@ -34,6 +34,9 @@ class QUICConnection : public QUICPacketTransmitter, public 
QUICFrameTransmitter
 {
 public:
   virtual QUICApplication *get_application(QUICStreamId stream_id) = 0;
-  virtual QUICCrypto *get_crypto() = 0;
-  virtual void close(QUICError error) = 0;
+  virtual QUICCrypto *get_crypto()                                 = 0;
+  virtual uint32_t maximum_quic_packet_size()                      = 0;
+  virtual uint32_t minimum_quic_packet_size()                      = 0;
+  virtual uint32_t pmtu()                                          = 0;
+  virtual void close(QUICError error)                              = 0;
 };
diff --git a/iocore/net/quic/QUICHandshake.h b/iocore/net/quic/QUICHandshake.h
index cd2a359..b364a93 100644
--- a/iocore/net/quic/QUICHandshake.h
+++ b/iocore/net/quic/QUICHandshake.h
@@ -27,7 +27,6 @@
 #include "QUICConnection.h"
 #include "QUICApplication.h"
 
-
 /**
  * @class QUICHandshake
  * @brief Do handshake as a QUIC application
diff --git a/iocore/net/quic/QUICStreamManager.h 
b/iocore/net/quic/QUICStreamManager.h
index 1b03166..7ea2700 100644
--- a/iocore/net/quic/QUICStreamManager.h
+++ b/iocore/net/quic/QUICStreamManager.h
@@ -46,7 +46,7 @@ private:
   QUICStream *_find_or_create_stream(QUICStreamId stream_id);
   QUICStream *_find_stream(QUICStreamId id);
 
-  QUICConnection *_qc   = nullptr;
+  QUICConnection *_qc       = nullptr;
   QUICFrameTransmitter *_tx = nullptr;
 
 private:

-- 
To stop receiving notification emails like this one, please contact
['"commits@trafficserver.apache.org" <commits@trafficserver.apache.org>'].

Reply via email to