Current Courses

In Fall, 2020, I am scheduled to teach a section of CSC/ECE 573, and a section of CSC 801.

For general information about these courses, and other courses I teach, see below. The archived course information is intended for overview rather than comprehensiveness. Due to space constraints as well as pedagogical reasons, not all the material is available from these archived versions of the course websites; notably homework solutions and student work products may not all be available.
  An Appeal

Please do not upload course materials you receive as part of your registration in a course on some other website or service. In most cases, such material (slides, homeworks, homework solutions, study guides, ...) are marked clearly as being copyrighted; even when they are not, if they were produced by the instructor or teaching assistants / graders, they are under implicit copyright.

It is the same as renting a movie on a streaming service; you have purchased the right to consume the content for your own benefit, but not the right to distribute further. The original owner of the content remains the owner.

Distributing content that you do not own is theft, plain and simple. Piracy is not a victimless crime. In the end, if you unlawfully distribute valuable content that you purchased a right to consume, you are simply devaluing your own training and credentials (which you are paying a considerable sum to acquire). If you have doubts about this, please feel free to come discuss in more detail with myself, or any other faculty member.


General Teaching

CSC801: Computer Science Seminar Series

The CSC801 series of sections is a forum for faculty and graduate student research presentations and discussions centered around current research problems in areas of Computer Science and advanced theories in these areas. In Fall, 2020, I will be offering a research preparation course that I have previously offered yearly since Fall 2016.
  Preparation for Academic Research

How do you start on the process of PhD research, if you have never done research before? What are the processes you will be expected to follow, and tasks you will be expected to perform, without necessarily being told how to? How do you know when you have become ready to "do research"?? Is P=NP?!

We can't tell you that last one, but we hope to help you with the others! We will go over the life cycle of research projects, the anatomy of research papers, how to read and write reviews, how to develop research ideas, and how to present and communicate research. This course is only open for CSC PhD students. If you are a first-year PhD student, you can also earning a full course credit toward your degree.

Note: This course is available for credit only for first year CSC Ph.D. students. (Others may attend if there is room.)


Seminars in previous years:

In Spring, 2011, I coordinated a section that focused on networking, the first since the inception of the series. In Spring, 2012, I co-taught the seminar, with Dr. Sarah Heckman, on the topic "Pervasive Applications for a Mesh Network Environment", utilizing the new CentMesh testbed at NCSU Centennial Campus. More information on that administration can be found here.

In Spring, 2013, the seminar focused on Software Defined Networking such as OpenFlow, and sliced network virtualization, with special attention to GENI. These topics are among the recent exciting things that have been happening in networking technology, and I believe we had a fun and productive time exploring them, utilizing the newly assembled SDN Lab in EB2 that I recently designed and realized. This version of the seminar matured into the Special Topic course on SDN that I currently teach.

CSC/ECE Special Topic : Software Defined Networks

This advanced graduate level Special Topic is available both at the 500-level and the 700-level. I created this course in Spring 2016, since when I am offering it once a year. Students will be required to complete homework assignments based on their reading, which will include significant programming assignments, and may need to complete hands-on exercises, largely in virtual networking labs. Students will also need to undertake a half-semester long project in the latter part of the semester that requires them to build an SDN network targeted at specific functionality, as well as a solution to the same based on traditional TCP/IP mechanisms. For 700-level students, this project is required to be designed to investigate an open question in the study of SDNs, while for 500-level students, it is allowed to be a replication of a known system configuration in order to assess performance characteristics. Information on the Spring, 2017 administration is here.

CSC/ECE Special Topic : Internet of Things: Applications and Implementation

This advanced graduate level Special Topic is available both at the 500-level and the 700-level, and forms one of several courses created in 2016 and 2017 that make up the IoT concentration of the MCN degree. I teach it on a rotating basis with Dr. Shahzad, who created the course. Students will learn about the ecosystem of IoT protocols and systems, and undertake group projects to implement actual functioning small IoT systems using commodity open hardware and software. Information on the Spring, 2017 administration is here.

CSC/ECE 778 : Optical Networks

This advanced graduate level course has been regularly taught at least once a year for the past several years. It addresses the technology, algorithms and recent research in this area. I most recently taught it in Fall, 2011; an archived version of the Fall, 2007 administration is available here. Some of the student deliverables have been removed due to space constraints. (All the final reports and presentations are available.)

Note: In Fall, 2006 and previously, this course had been numbered CSC/ECE 775. (It was renumbered to allow the introductory and advanced wireless networking courses to be numbered sequentially.)

ECE/CSC 777 : Telecommunications Network Design

This advanced graduate level course has been regularly taught at least once a year for many years, usually by Dr. Arne Nilsson. I taught it for the first time in Fall, 2012. It focuses on the topological design and resource allocation of large scale telecommunications networks, including analytical and simulation investigation of call arrival/departure models, as well as examination of bandwidth and resource placement issues.

Both in Fall, 2012 and Fall, 2013, the deliverables for the course have included, in addition to homeworks and programming assignments, an individual or pair-wise tutorial assignment. Each student or pair of students is assigned one of the advanced topics in the course. Early in the course, the fundamental topics are covered by the instructor, as well as summary views of each advanced toic. Each student/pair then has to present the assigned topic to the whole class, adding results from computational verification and simulation. More information on the Fall, 2013 administration can be found here.

CSC/ECE 772 : Survivable Networks

This special topic was recently developed jointly by George Rouskas and myself, and we co-taught it for the first time in Spring, 2007, and again in Spring, 2008. Most recently, I taught it in Fall, 2009. In the past few decades, networks have attained critical infrastructure status, and continued operation in the face of equipment failure has become a mainstream issue. This course focuses on the theory, protocols, and research issues related to network fault-tolerance and survivability in large long-haul networks, as well as some coverage on survivability-related issues such as performability in wireless networks. An archived version of the Fall, 2009 administration is available here. Some of the student deliverables have been removed due to space constraints. (All the research project reports are available.)

Note: In Spring, 2007 and Spring, 2008, this course was taught as a special topic. It has since become a regular course and renumbered as 772.

CSC 791b : Advanced Topics in Network Design

In Spring, 2005, I created this special topic to address a gap in our networking curriculum, and taught it in both Spring and Fall of 2005. This course is also a guided entry into research in this area. Here is
general information on 791b.

While producing actual publishable research is not a required goal of such courses, some students do get to that point. In the Fall 2005 administration, one student's work was submitted, accepted and presented at a conference, all before the end of the semester! Two more students' works were close to final submission.

CSC600 : Graduate Orientation

I have presented a session in CSC600 many times. The Fall 2013 version lecture is available here as PDF.

CSC/ECE 573 : Internet Protocols

This course presents details and internals of the main protocols of the TCP/IP suite of protocols, and provides conceptual views of the protocols, the Internet, and related issues such as Quality of Service issues in the Internet.

This course covers a large amount of ground, and different administrations often end up focusing more on one part or another, depending on the population of students in the specific section. Typically, in my sections I assume that students are taking the course after a typical broad-based introductory course (like ECE/CSC 570, see below), and therefore are already familiar with the fundamentals of the Internet suite of protocols, IP, TCP. We cover those topics briefly in the early weeks. Students can depend on this section of the course as a refresher for those topics, but should not expect it to be remedial; consult with myself or other instructors early in the semester, if in doubt. The bulk of the course focuses on kernel module programming, GENI prototyping, SDN and Internet architecture. Some representative information on my latest administration of this course (in Fall, 2016) is available at the archived course homepage.

ECE/CSC 570 : Computer Networks

This is the cornerstone course in computer networking in the CSC graduate curriculum and the MCN curriculum. Several sections of this course are taught each year, and I frequently teach one of these sections (typically in Fall). Most recently, I taught it in Fall, 2019 - an archived version of this administration will be made available to students in a future semester. For others interested, an archived version of the Fall 2010 administration is available.

CSC 453 : Software for Wireless Sensor Systems

This course was created by Dr. Robert Fornaro and taught by him in the last few years. I taught it for the first time in Fall, 2012. This course focuses on the ever-increasing variety of sensor systems, and issues of networking and computing related to them. Studying algorithms and exploring them by programming is the main mode of discovery in this course, including algorithms for ad hoc discovery, routing, and secure data transfer. At this time, the course can be seen as an introduction to the emerging general area of Internet of Things. It requires high-level programming, and also a limited introduction to low-level programming and hardware interfacing.

From Fall 2013 onwards, I adopted the BeagleBone Black as the programming platform - this allowed the students a better exploration of issues that are of increasing importance in sensor/actuator networks, while providing a more current and extensive community codebase, a stable Linux base, and the ability to code in Java or other high-level languages of choice. More information on the most recent administration, Spring 2016, can be found here.

CSC 401 : Data and Computer Communication Networks

This is the first of the two-course networking sequence in our undergraduate curriculum. In 2003, I revamped this course and taught it in two successive semesters, and have since served as course coordinator for this course. I also taught it in Spring, 2007, and most recently in Fall, 2011. Some representative information is archived here for the Fall 2011 administration.

CSC 230 : C and Software Tools

This is a new course, instituted in Fall, 2005, to serve as a course in a second high-level programming language and introduction to procedural programming. In Spring, 2006, and Spring, 2007, I taught this course with large classes of undergraduate students (107 and 112 final grades were assigned respectively). Some representative material is available for the Spring, 2007 administration.

Other Instructional Development

Software Defined Networking Laboratory

In Fall, 2012, with the support of the CSC department, I devoted a section of the re-equipped CSC Networking Laboratory (see below) to a facility to offer students the opportunity of hands-on experience with multiple real and virtual OpenFlow switches, including HP, Cisco and Pronto OpenFlow switches and VMs running Open Virtual Switch. They are accompanied by PCs and servers that allow creating a large number of virtual machines to act as hosts transmitting data through the switches. Several controllers have been tested with all the switches, and various demo scenarios are available for students to repeat that have been worked out by the research students who helped develop the lab.

CSC Networking Laboratory

In Fall, 2010, the College of Engineering offered a one-time opportunity to apply for large ETF funds, and I wrote a proposal to revamp and redesign the CSC departmental networking laboratory. I am grateful that the College awarded the full $130K that I had requested; these funds have been used to purchase servers and switches as envisioned in the proposal, and re-equip the networking labs. In the current semester, it is supporting the teaching of some graduate courses, and will do so in future semesters to come. The new vision is driven by the changing nature of networking equipment. Of late, increasingly the functioning of networks is driven by software, running on commodity hardware. This has also prompted an explosion of such software systems, and it is desirable that our graduates have exposure to a large number of such systems. Many such systems are available freely or as open-source alternatives, but require comparatively powerful computers and network switches. We have developed or adapted a series of such software environments that the students can use to have experience with a "network-in-a-box", with end stations, intermediate nodes, switches and routers operating as virtual machines inside compute-power-rich servers.

Internet Teaching Laboratory

I developed this laboratory in Spring 2000 since which time more than a thousand students have been through it. The first two sets of exercises currently accompany CSC/ECE 573 - Internet Protocols, the third set involves using the SmartBits network tester and has not been deployed for students due to lack of sufficient SmartBits boxes becoming available. This set of exercises was demonstrated at the CAIDA Internet Teaching Laboratories workshop at the University of Virginia at Charlottesville, VA, in summer 2001.

The following handout accompanied the demonstration, and contains all three sets of exercises. A complete package to replicate the entire lab is available from the NC State Networking Laboratories site. Please also read the legal notices posted in the complete package.

The lab was physically located in Ventures II, Suite 150, at the Centennial Campus. As of 2007, it has moved to Engineering Building II.

A Distance OPNET Lab

I proposed this project to DELTA to allow the use of dedicated resources to let distance students have a lab experience similar, though not indistinguishable, from that of in-class students. The original proposal was proof-of-concept scale, not full scale, intended to possibly serve as a blueprint for a future full scale deployment.

The proposal was awarded and Sharat C. Visweswara received a net-lab assistantship for a spring semester and half of a summer semester to perform the implementation under my direction. The implementation was successful and the system was used to support ECE/CSC 570 students during Fall 2003. Distance students were able to access a bank of servers directly using the Secure SHell (ssh) protocol. Access is blocked off for all other system users, except some administrative users, and is controlled for distance students using a web-based reservation system. Thus students obtain controlled access to OPNET without a processing bottleneck at public UNITY servers.

The lab is no longer in use, because this functionality has been subsumed by the VCL environment. VCL is a signficantly larger and more general remote access to computing, and in the years since has evolved into a full function cloud computing environment. A few concepts from the DE OPNET lab development process contributed to architectural issues in VCL.

Last updated: March, 2020